gpt4 book ai didi

assembly - Cortex M - IRQ 禁用的原子性

转载 作者:行者123 更新时间:2023-12-02 19:50:53 25 4
gpt4 key购买 nike

我花了几个小时试图回答我的问题,但找不到任何令人满意的答案。

由于 ARM Cortex-M 内核没有任何指令来读取全局中断掩码(PRIMASK 寄存器)的状态并立即禁用它,因此所有框架都使用以下两个指令序列:

mrs r0, PRIMASK ; Read current state
cpsid i ; Mask IRQs

但是没有解释,为什么这段代码被认为是原子的...当IRQ出现在这两条指令的执行之间并且IRQ处理程序改变PRIMASK的状态时会发生什么?喜欢

mrs r0, PRIMASK ; Read current state
; Some weird IRQ handling happens here and changes PRIMASK
cpsid i ; Mask IRQs

由于此代码被广泛使用,我怀疑这种情况在(架构?)设计上不应该发生。有人可以向我解释一下为什么吗? :-) 谢谢!

最佳答案

What happens when the IRQ comes in between the execution of this two instructions and the IRQ handler changes the state of PRIMASK?

程序将随机锁定,因为这也会破坏大多数其他“等待中断”方法(例如 volatile 变量)。

请记住,只有屏蔽中断时才会发生,因此中断处理程序只能禁用中断。但是全局禁用中断也会阻止其他中断触发 - 并且等待某些硬件交互的代码通常不会随机重新启用中断。

这就是为什么当中断处理程序修改 PRIMASKFAULTMASK 而不在异常返回时恢复它时,它被认为是损坏的。

关于assembly - Cortex M - IRQ 禁用的原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58508470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com