STM32F0代码从IAR7.60移植到9.20.4时__no_operation报错求解决
解决IAR 9.20.4中
__no_operation()未定义的问题 针对你从IAR 7.60移植代码到9.20.4时遇到的__no_operation()报错和警告,可通过以下几种方式解决:
替换为CMSIS标准空操作宏
STM32F0基于Cortex-M0内核,直接使用CMSIS定义的__NOP()宏即可,它在core_cm0.h头文件中声明,是ARM官方标准的空操作实现,兼容性更好。替换后代码示例:__NOP();直接使用汇编指令
若不想依赖头文件,可直接嵌入ARM汇编的空操作指令,代码示例:asm("nop");手动兼容旧函数名
如果不想大面积修改代码,可在项目的公共头文件中手动定义__no_operation()函数,让其映射到标准空操作实现:#include "core_cm0.h" static inline void __no_operation(void) { __NOP(); }或者用汇编实现:
#pragma language=extended void __no_operation(void) { asm("nop"); }
问题原因说明
IAR 9.x版本相比7.x做了标准兼容性升级,默认启用C99标准(隐式声明函数会触发警告),同时移除了部分非标准的内置函数/宏,旧版本中的__no_operation()属于这类被移除的非标准实现,因此出现链接错误和编译警告。
内容的提问来源于stack exchange,提问作者NicoCaldo
相关产品推荐
相关产品推荐

