小编Pet*_*dra的帖子

Cortex M - IRQ 禁用的原子性

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

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

mrs r0, PRIMASK ; Read current state
cpsid i         ; Mask IRQs
Run Code Online (Sandbox Code Playgroud)

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

mrs r0, PRIMASK ; Read current state
; Some weird IRQ handling happens here and changes PRIMASK
cpsid i         ; Mask IRQs
Run Code Online (Sandbox Code Playgroud)

由于这段代码被广泛使用,我怀疑(架构?)设计永远不会发生这种情况。有人可以向我解释为什么吗?:-) 谢谢!

assembly arm atomicity cortex-m

6
推荐指数
1
解决办法
263
查看次数

标签 统计

arm ×1

assembly ×1

atomicity ×1

cortex-m ×1