Keil5 编译错误 error: call to undeclared function '__enable_irq'

stm32f1xx_hal_i2c.c 中 __enable_irq 和 disable_irq 函数出现了报错: error: call to undeclared function '__enable_irq'; ISO C99 and later do not support implicit of function declarations 在 core_cm3.h -> cmsis_compiler.h -> cmsis_armclang.h (ARM Compiler 6) 或 cmsis_armcc.h (AC5) 中对这两个方法没有定义,只有一段注释: __enable_irq 和 disable_irq 控制的是PRIMASK寄存器值。 是一种 intrinsic 函数,编译器会自动识别并替换为相关的指令,它们其实是编译器的一部分,实际的定义位于Keil的 arm_compat.h 中。 /* * Arm Compiler 6 (armclang) */ #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) #include "cmsis_armclang.h" 在其中,这个头文件 arm_compat.h 本该是不存在的: #include <arm_compat.h> 在.\Drivers\CMSIS\Include 中多了一个arm_compat.h文件,这会导致覆盖编译器的头文件,所以会出现一系列错误。 ...

September 6, 2025 · LingC