ARM Cortex-M4 / 7:LDREX / STREX之间的常规内存访问使独占监视器无效

时间:2017-09-24 15:51:25

标签: arm atomic cortex-m stm32f7

我正在尝试重写一个代码部分,目前可以在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  

0 个答案:

没有答案