-
- Откуда информация про то, что адрес игнорируется? А если обращение
к памяти было от контроллера ПДП, без прерывания? Что, тоже адрес
игнорируется? - Nikolay_Po(04.05.2024 04:28)
- Адрес игнорируется, это описано в армовских доках на Cortex-M.
Вложенные ldrex/strex работать не будут (сработает только самая
глубокая пара). На STM32F4 отслеживания активности DMA я не
обнаружил, да и затруднительно оно в реализации, с учётом крайне
развесистого шинного хозяйства. На толстых многоядерных кортексах
может и есть что. - LightElf(12.05.2024 18:49)
- Насчёт вложений 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)
- Адрес игнорируется, это описано в армовских доках на Cortex-M.
Вложенные ldrex/strex работать не будут (сработает только самая
глубокая пара). На STM32F4 отслеживания активности DMA я не
обнаружил, да и затруднительно оно в реализации, с учётом крайне
развесистого шинного хозяйства. На толстых многоядерных кортексах
может и есть что. - LightElf(12.05.2024 18:49)
- Откуда информация про то, что адрес игнорируется? А если обращение
к памяти было от контроллера ПДП, без прерывания? Что, тоже адрес
игнорируется? - Nikolay_Po(04.05.2024 04:28)