专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
今天看啥  ›  专栏  ›  嵌入式微处理器

__disable_irq() 和 __enable_irq()定义在哪?

嵌入式微处理器  · 公众号  ·  · 2024-07-22 12:00

文章预览

前段时间,一位工程师向我咨询了一个问题,问我为什么他的MCU KEIL工程代码里没有找到__disable_irq() 和 __enable_irq()的具体定义,是不是有问题。 直接在工程里搜索,确实只能在cmsis_armcc.h文件里看到下面的两处注释说明,并没有这俩函数的具体定义。 可是,如果直接去调用这俩函数的话,编译又不会报错,那么这俩函数的定义到底在哪呢? __disable_irq() 和 __enable_irq() 是所谓的intrinsic函数,编译器自动识别并替换为相关的指令,它们其实是编译器的一部分,实际的定义位于arm_compat.h 文件中(位于KEIL的安装目录里), static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) __disable_irq(void) {   unsigned int cpsr; #if __ARM_ARCH >= 6 #if defined(__ARM_ARCH_PROFILE)  & &  __ARM_ARCH_PROFILE == 'M'   __asm__ __volatile__( "mrs %[cpsr], primask\n"                    ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览