gpt4 book ai didi

arm - 指令中途是否会出现ARM中断?

转载 作者:行者123 更新时间:2023-12-04 14:49:16 25 4
gpt4 key购买 nike

这个问题会简短而甜蜜。

我知道一条指令可以在指令之间发生,但会发生中断 期间指令?在将所有值加载到寄存器之前可以中断加载多指令吗?

mov r0, r1
< interrupt can happen here
ldm r0, {r1-r4} < can an interrupt happen **during** a load multiple instruction?

最佳答案

加载多个指令明确不是原子的。请参阅 ARM V7C 架构引用手册的 A3.5.3 部分。

LDM, LDC, LDC2, LDRD, STM, STC, STC2, STRD, PUSH, POP, RFE, SRS, VLDM, VLDR, VSTM, and VSTR instructions are executed as a sequence of word-aligned word accesses. Each 32-bit word access is guaranteed to be single-copy atomic. The architecture does not require subsequences of two or more word accesses from the sequence to be single-copy atomic.



如果继续阅读,您会发现 LDM/STM 指令可以被中断中止(并在中断返回时从头重新启动)。 LDM 和 STM 指令总是可以被数据中止中断,因此从这个意义上说它们是非原子的。否则,ARMv7-A 架构会尽力帮助您。对于中断,只有在启用了低中断延迟并且正在访问正常内存时才能中断它们。因此,至少,您不会重复访问设备内存。不过,您不想做任何期望对普通内存进行原子读/写的事情。

在 v7-M 上,LDM 和 STM 可以随时中断(参见 ARMv7-M 架构引用手册的 B1.5.10 部分)。它的实现定义了指令是从加载/存储列表的开头重新启动,还是从它停止的位置重新启动。正如ARM所说:

The ARMv7-M architecture supports continuation of, or restarting from the beginning, an abandoned LDM or STM instruction as outlined below. Where an LDM or STM is abandoned and restarted (ICI bits are not supported), the instructions should not be used with volatile memory.



换句话说,如果您正在尝试编写可移植代码,请不要依赖 LDM 或 STM 的原子性。

关于arm - 指令中途是否会出现ARM中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857760/

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