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