-
- Насчёт вложений LDREX/STREX, разумеется, сработает лишь самая
глубокая пара. Остальные получат отказ (фиксацию вмешательства в
память). И это будет безопасно. В этом смысле оно "работает",
использование вложенных LDREX/STREX - не приведёт к
непредсказуемому поведению и не разрушит атомарность доступа,
предусмотренную циклом с LDREX/STREX. - Nikolay_Po(13.05.2024 10:22)
- Ну если "зациклится" == "сработает", то да ;-) - LightElf(13.05.2024 14:01)
- Когда самое глубоко вложенное сделает свои дела и перестанет
вызывать STREX, цикл у чуть менее глубокого успешно завершится. И
так до самого верхнего уровня. - Nikolay_Po(13.05.2024 15:27)
- У нас, похоже, разное понимание слова "вложенный". LightElf(314 знак., 13.05.2024 15:44 - 18:40)
- Да. Разное. Я имел ввиду вложение этой пары инструкции внутри прерывания уже исполняемой пары. Nikolay_Po(129 знак., 13.05.2024 15:49)
- Но зачем, Холмс? :-) - SciFi(13.05.2024 15:48)
- Да фиг его знает. Просто иллюстрация к термину "вложенный". - LightElf(13.05.2024 18:41)
- Предложите, как сделать обновление двух переменных, без
использования отдельного флага "занято". Там вложенность так и
просится AlexBi(264 знак., 13.05.2024 18:22)
- Никак, что логично. Сделай на две переменные - завтра попросят десять переменных атомарно обновить ;-) - LightElf(13.05.2024 21:48)
- Увы, так не заработает. Я прикидывал и не нашёл способа атомарно
обновить, при помощи этой пары инструкций, что-либо больше 32 бит.
Если у STM32F адрес не проверяется, то для обоих переменных
достаточно одной обёртки. Но это будет противоречить документации,
где явно указано, что нужно проверять сохранность эксклюзивности
доступа именно по указанному адресу и именно указанной ширины. А
это лишь один адрес с шириной данных до 32 бит. - Nikolay_Po(13.05.2024 19:54)
- Это не у STM32, это у Cortex-M3/4 вообще. LightElf(346 знак., 13.05.2024 20:46, ссылка)
- Именно. Не нужно доводить до абсурда. Жаль, иногда само получается. - Nikolay_Po(13.05.2024 15:50)
- У нас, похоже, разное понимание слова "вложенный". LightElf(314 знак., 13.05.2024 15:44 - 18:40)
- Когда самое глубоко вложенное сделает свои дела и перестанет
вызывать STREX, цикл у чуть менее глубокого успешно завершится. И
так до самого верхнего уровня. - Nikolay_Po(13.05.2024 15:27)
- Ну если "зациклится" == "сработает", то да ;-) - LightElf(13.05.2024 14:01)
- Насчёт вложений LDREX/STREX, разумеется, сработает лишь самая
глубокая пара. Остальные получат отказ (фиксацию вмешательства в
память). И это будет безопасно. В этом смысле оно "работает",
использование вложенных LDREX/STREX - не приведёт к
непредсказуемому поведению и не разрушит атомарность доступа,
предусмотренную циклом с LDREX/STREX. - Nikolay_Po(13.05.2024 10:22)