Я пытаюсь переписать раздел кода, который в настоящее время работает с отключением/включением прерываний с помощью 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