0

我正在尝试重写一个代码部分,该部分当前可以在 STM32F7(单核,微控制器)上使用 LDREX/STREX 禁用/启用中断。

听起来像是一个简单的问题,但经过几天的研究,似乎在 ARM 文档和社区回复中都没有找到明确的答案:

LDREX/STREX 之间的常规内存访问是否会使独占监视器状态无效(因此总是使 STREX 失败)?

常识是它应该失效,但 ARM 文档仍然没有将常规内存访问作为使独占监视器失效的情况之一。

事实上,在大多数情况下,LDREX 和 STREX 之间的工作只能在寄存器中完成,所以这个问题不相关,但在我的情况下,这还不够,我需要访问内存。我基本上是在尝试做一个检测器“这些线路之间是否发生了中断?”

ST手册指出EGR是整个内存,但它仍然没有回答这个问题。

代码部分:

failed:
LDR     R2, =g_Exclusive_Var
LDREX   R0, [R2]
...
LDR     ...  ---> is this OK
STR     ...  ---> is this OK
...
STREX   R3, R0, [R2] 
CMP     R3, #0
BNE     failed  
4

0 回答 0