我正在嵌入式设备上工作,并且有些代码最初是使用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/