ARM Cortex-M4/7: регулярные обращения к памяти между LDREX/STREX делают недействительным эксклюзивный монитор

Я пытаюсь переписать раздел кода, который в настоящее время работает с отключением / включением прерываний с помощью LDREX/STREX на STM32F7(одноядерный, микроконтроллер).

Может показаться простым вопросом, но после нескольких дней исследований, похоже, не нашел окончательного ответа ни в документации 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 ответов

Другие вопросы по тегам