-
- Чего-то мысль не сходится, или нет? Chum_A(133 знак., 28.12.2021 16:20)
- Нужны только атомарное чтение и атомарная запись. Что достигается
просто использованием переменной правильного размера. Атомарная
арифметика (для которой нужны критические секции или всякие там
LDREX/STREX) - не нужна. - LightElf(28.12.2021 17:32)
- Дык, я же начал с Кортекса-М, ну не получается там атомарных
операций без всяких там.. - Chum_A(28.12.2021 17:37)
- чтение или запись uint8_t, uint16_t и uint32_t на кортексе
атомарны. Ну не может он записать сначала один байт от uint32_t, а
потом - остальные три байта. - LightElf(28.12.2021 17:52)
- UPD таки без конкретного примера дискуссия бессмыслена (возможно,
что мы рассматриваем атомарность в разных контекстах). Текст далее
оставлен "для справки". В инструкциях LDR/STR в качестве второго
аргумента всегда в том или ином виде регистр (или нет?),
соответственно его надо предварительно загрузить, что требует ещё
инструкцию. Ну и какая с двумя (минимум) инструкциями атомарность? - Chum_A(29.12.2021 10:18)
- Вот здесь пример. Прекрасно работает на кортексах (при условии, что
читатель один и писатель тоже один) с индексами uint8_t, uint16_t и
uint32_t. С индексами uint8_t работает на AVR и HCS12. На 8051
думаю тоже работать будет, если модификаторы памяти правильные
поставить. LightElf(1 знак., 29.12.2021 14:57, ссылка)
- Посмотрел, монстровый макрос. Любители ++ смотрят на Вас с ненавистью :))). - Chum_A(30.12.2021 09:08)
- Достаточно такой атомарности, чтобы читающий поток получал
стабильное состояние указателя - то есть либо текущее, либо
предыдущее. А не так, что младший байт уже инкрементировался и
переполнился, а старший ещё не обновился. - Samx(29.12.2021 10:48)
- Например, вот: SciFi(218 знак., 29.12.2021 10:59)
- Это работает, если проверять из треда указатель, изменяемый в прерывании. Samx(177 знак., 30.12.2021 15:10)
- Например, вот: SciFi(218 знак., 29.12.2021 10:59)
- Вот здесь пример. Прекрасно работает на кортексах (при условии, что
читатель один и писатель тоже один) с индексами uint8_t, uint16_t и
uint32_t. С индексами uint8_t работает на AVR и HCS12. На 8051
думаю тоже работать будет, если модификаторы памяти правильные
поставить. LightElf(1 знак., 29.12.2021 14:57, ссылка)
- UPD таки без конкретного примера дискуссия бессмыслена (возможно,
что мы рассматриваем атомарность в разных контекстах). Текст далее
оставлен "для справки". В инструкциях LDR/STR в качестве второго
аргумента всегда в том или ином виде регистр (или нет?),
соответственно его надо предварительно загрузить, что требует ещё
инструкцию. Ну и какая с двумя (минимум) инструкциями атомарность? - Chum_A(29.12.2021 10:18)
- чтение или запись uint8_t, uint16_t и uint32_t на кортексе
атомарны. Ну не может он записать сначала один байт от uint32_t, а
потом - остальные три байта. - LightElf(28.12.2021 17:52)
- Дык, я же начал с Кортекса-М, ну не получается там атомарных
операций без всяких там.. - Chum_A(28.12.2021 17:37)
- Нужны только атомарное чтение и атомарная запись. Что достигается
просто использованием переменной правильного размера. Атомарная
арифметика (для которой нужны критические секции или всякие там
LDREX/STREX) - не нужна. - LightElf(28.12.2021 17:32)
- Можно давать консервативную оценку свободного места. Если что, юзверь подождёт до следующей попытки, чай не из графьёв. - SciFi(28.12.2021 15:09)
- Чего-то мысль не сходится, или нет? Chum_A(133 знак., 28.12.2021 16:20)