【问题标题】:What do the __CC_ARM, __ICCARM__, __GNUC__ and __TASKING__ macros mean?__CC_ARM、__ICCARM__、__GNUC__ 和 __TASKING__ 宏是什么意思?
【发布时间】:2013-07-10 13:54:34
【问题描述】:

我正在使用 stm 开发 STM32l151rct6a,我偶然发现了这些 MACRO 定义

__CC_ARM, __ICCARM__, __GNUC__, __TASKING__

有人知道它们的意思吗?

【问题讨论】:

    标签: c data-structures embedded microcontroller


    【解决方案1】:

    这些是用于 ARM 处理器的不同编译器,可能这些宏用于在可由多个编译器编译的代码中隐藏与编译器相关的内容。

    【讨论】:

    • __CC_ARM -->Description
    • Imagecraft 的宏是__IMAGECRAFT____ICC_VERSION__ICCARM__ 似乎是 IAR。
    • @Clifford 感谢您的提醒,我会更正答案。关于__ICC_VERSION__,我无法立即在the documentation中找到那个
    • PDF manual第56页。
    • @Clifford 好的,我知道了,我指的在线文档已经很老了,而您指向的 PDF 文档版本 8。
    【解决方案2】:

    它们是用于识别用于构建代码的编译器的宏。

    可以在http://sourceforge.net/p/predef/wiki/Home/ 找到此类宏以及用于识别架构和操作系统等的其他宏的列表。然而,它并未全面涵盖来自小型嵌入式系统供应商(例如 Tasking 和 Imagecraft)的许多编译器。

    【讨论】:

      【解决方案3】:

      这些是编译器特定的 MACROS,并在编译器代码中定义。例如,__ICC 用于 IAR,__GNU 用于 GNU 编译器。在 BSP 部分中给出了一些代码,用于 STM 平台,它们依赖于编译器。

      【讨论】:

      • 根据sourceforge.net/p/predef/wiki/Compilers IAR由IAR_SYSTEMS_ICC标识。这里的另一个答案建议使用 Imagecraft C for _ICC,这听起来很合理。
      • @Clifford Line #elif defined ( __ICCARM__ ) /* IAR Ewarm 5.41+ */ This LinkThis link 仅谈论 IAR。
      • @Dayalrai:确实 - 没有标准,IAR 和 Imagecraft 可能都使用了这个,其他答案可能不正确,Sourceforge wiki 可能不完整或包含错误。始终谨慎使用此类宏。
      • 另一个答案不正确 - Imagecraft 使用 __IMAGECRAFT__ says the manual。他们确实有另一个__ICC_VERSION,这可能会引起混淆。
      • @Clifford 感谢您在此线程上提供更清晰和可靠的链接。
      猜你喜欢
      • 1970-01-01
      • 2015-01-09
      • 2014-11-21
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 2012-12-30
      相关资源
      最近更新 更多