• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于全局中断的求助,INTX_DISABLE与__disable_irq

雪狼 2021-02-22 浏览量:1620
在sys.c里有下面开关中断的指令


//关闭所有中断(但是不包括fault和NMI中断)
__asm void INTX_DISABLE(void)
{
        CPSID   I
        BX      LR          
}
//开启所有中断
__asm void INTX_ENABLE(void)
{
        CPSIE   I
        BX      LR  
}

这两个指令与__disable_irq    __enable_irq内核自带的函数有什么区别吗?我记得视频里有介绍,可是忘了是哪一集视频了

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • __disable_irq 编译的目标代码是 CPSID   I

    __enable_irq  编译的目标代码是 CPSIE   I

    所以两种功能相同,函数方式效率低点。因为要调用函数,涉及到PC跳转和流水线问题

    • 发布于 2021-02-22
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:2
  • 指令“CPSID   I和CPSIE   I”以及__disable_irq/__enable_irq都是对状态寄存器CPSR中中断标志位进行操作,并没有去对GIC做操作,只是简单的不让CPU响应中断,当_disable_irq后,如果产生了中断,这时CPU没有响应中断,但如果再__enable_irq后还会响应中断并处理
    • 发布于2021-02-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 功能上是完全一样的,本质上调用的汇编是一样的,只是表达方式不一样
    • 发布于2021-02-24
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于全局中断的求助,INTX_DISABLE与__disable_irq