【发布时间】:2013-07-10 13:54:34
【问题描述】:
我正在使用 stm 开发 STM32l151rct6a,我偶然发现了这些 MACRO 定义
__CC_ARM, __ICCARM__, __GNUC__, __TASKING__
有人知道它们的意思吗?
【问题讨论】:
标签: c data-structures embedded microcontroller
我正在使用 stm 开发 STM32l151rct6a,我偶然发现了这些 MACRO 定义
__CC_ARM, __ICCARM__, __GNUC__, __TASKING__
有人知道它们的意思吗?
【问题讨论】:
标签: c data-structures embedded microcontroller
这些是用于 ARM 处理器的不同编译器,可能这些宏用于在可由多个编译器编译的代码中隐藏与编译器相关的内容。
ICCARM --> IAR (还会有一个宏__IAR_SYSTEMS_ICC__ 设置为编译器平台版本__IMAGECRAFT__ --> Imagecraft C(另请参阅下面的 Clifford 的 cmets - 还有一个宏 __ICC_VERSION__,请参阅 pdf documentation)TASKING --> Tasking
__CC_ARM --> ARM's (RealView) compiler
__GNUC__ --> gcc
【讨论】:
__IMAGECRAFT__ 和__ICC_VERSION。 __ICCARM__ 似乎是 IAR。
__ICC_VERSION__,我无法立即在the documentation中找到那个
它们是用于识别用于构建代码的编译器的宏。
可以在http://sourceforge.net/p/predef/wiki/Home/ 找到此类宏以及用于识别架构和操作系统等的其他宏的列表。然而,它并未全面涵盖来自小型嵌入式系统供应商(例如 Tasking 和 Imagecraft)的许多编译器。
【讨论】:
这些是编译器特定的 MACROS,并在编译器代码中定义。例如,__ICC 用于 IAR,__GNU 用于 GNU 编译器。在 BSP 部分中给出了一些代码,用于 STM 平台,它们依赖于编译器。
【讨论】:
__IMAGECRAFT__ says the manual。他们确实有另一个__ICC_VERSION,这可能会引起混淆。