我正在嵌入式设备上工作,并且有些代码最初是使用IAR编译器编译的。

我正在尝试使用GCC编译器重新编译所述代码。

有一个特殊的语句:typedef __IO,它根本不会被编译(“无法识别的符号错误”)。

谁能建议我如何使该语句正确编译?

最佳答案

如果无法识别,那是因为尚未包含包含定义的适当系统头。

这将在工具链随附的芯片支持头文件中定义。它是类型限定符,或者是将扩展为类型限定符的宏(#define)。例如,其用法如下:

__IO uint8_t CSSR;


这里的uint8_t是类型,因此__IO实际上不能是typedef,因为在有效的类型上不使用__IO。 __IO宏可扩展到特定编译器需要的任何内容,以确保正确的I / O访问和寻址。在I / O是内存映射的典型情况下,它会简单地扩展为volatile,因为所有I / O都应声明为volatile,以确保未优化显式访问。

如果您想确定的话,请下载IAR工具的演示版,并在头文件中查看如何为您的特定体系结构定义它。否则,您可能只使用#define __IO volatile

关于gcc - GCC中的“__IO”指令是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14359775/

10-16 15:15