-
- чтение или запись 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)