__disable_irq和rt_hw_interrupt_disable的区别

发布于 2021-04-29 15:13:40

__disable_irq容易理解,就是直接禁止所有中断触发。
在RTT代码中还经常看到rt_hw_interrupt_disable。
请教一下在RTT应用中使用这两个来禁止中断会有什么不一样呢?

查看更多

关注者
0
被浏览
86
2 个回答
yangjie
yangjie 2021-04-29

rt_hw_interrupt_enable/disable 可以嵌套,比如当它用于临界区的时候,能以嵌套方式开关中断而不乱掉。

可以看看文档中写的:https://www.rt-thread.org/document/site/programming-manual/interrupt/interrupt/#_15

image.png

flashman2002
flashman2002 2021-04-29

rt_hw_interrupt_disable函数的定义在汇编文件中:

.globl rt_hw_interrupt_disable
rt_hw_interrupt_disable:
    mrs r0, cpsr
    cpsid if
    bx  lr

可以中断嵌套。
而__disable_irq的gcc实现是

__ASM volatile ("cpsid i" : : : "memory");

只是关中断。
看到区别了吧。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览