189 похожих чатов

Подскажите пожалуйста, атомарно ли чтение 32-х разрядной переменной в Cortex-M3?

Нужно чтобы не было ситуации, когда запись в эту переменную в прерывании приводит ее в некорректное состояние (когда первые два байта уже записаны, остальные нет или наоборот)

17 ответов

18 просмотров

Если переменная выровнена, то атомарно.

Serg-Sapov Автор вопроса
零 幡田
Если переменная выровнена, то атомарно.

А как ее принудительно выровнять? IAR

все сильно зависит, есть ли кеш

Serg Sapov
А как ее принудительно выровнять? IAR

ее принудительно можно не выровнено положить, а если ничего не делать, то она будет выровнена

используй барьеры, перед доступом к ней и критическую секцию (запрет прерываний) и будет тебе счастье, не только с 32 битными переменными) А вообще, опиши кейс, что ты хочешь конкретно. Есть разные способы получить желаемое

Да, для Си в stm32 чтение и запись 1, 2 и 4 байтовых переменных - атомарны

hold3r
Да, для Си в stm32 чтение и запись 1, 2 и 4 байтов...

А если переменная находится в составе не выровненной структуры? Просто интересно

Leonid Zaliubovskyi
используй барьеры, перед доступом к ней и критичес...

для него это избыточно, как я понял у него такой кейс: есть: volatile uint32_t cnt; есть irq (одно) он в нем как то модифицирует скажем так: cnt++ Вопрос, нужно ли выравнивать данные и не будет ли ситуация что при чтении cnt из основной программы в cnt будет каша из-за отсутствия атомарности чтения. Так как прерывания одно и данные по дефолту компилятром выровнены, ему никаких телодвижений больше делать не нужно. ибо ldr будет один. а так как волотайл есть, то чтение будет всегда актуальным., атомик был бы нужен, если cnt модифицировалась в разных прерываниях с разными приоритетами.

hold3r
Да, для Си в stm32 чтение и запись 1, 2 и 4 байтов...

но в идеале, лучше критической секцией обмазать. Чтобы прерывание не поменяло чего. Ибо бывают кейсы разные, потому чтобы наверняка - критические секции

Leonid Zaliubovskyi
но в идеале, лучше критической секцией обмазать. Ч...

Как оно поменяет в случае к доступа к базовым 4битный данным? )

ankhar Kharitonov
А если переменная находится в составе не выровненн...

In ARMv7-M, the single-copy atomic processor accesses are: • all byte accesses. • all halfword accesses to halfword-aligned locations. • all word accesses to word-aligned locations.

ankhar Kharitonov
А если переменная находится в составе не выровненн...

если структура упакована, то компилятор будет судить по своим ивристикам, как лучше (быстрее) это дело прочитать. но М3 и старше невыровненное чтение есть из коробки. просто ldr будет один как команда, но вот на шине команда разабьется на несколько транзакций. на M0 он получит UsageFault (если сам ручками будет читать) компилятор же зная что выровнено а что нет, сам разрулит вплоть до побайтного чтения

hold3r
Как оно поменяет в случае к доступа к базовым 4бит...

4 байтным наверное все же. Например у тебя структуру читает, которая выровненная и состоит из нескольких полей и потом созраняет. Вместо нескольких LDR-STR можент оказаться пара LDM-STM - вот один из примеров

Leonid Zaliubovskyi
4 байтным наверное все же. Например у тебя структу...

ldm невыровненным быть не может, т.е. оно будет читать отдельные 32битные -- атомарно. так что нет, не может

Vyacheslav Olkhovchenkov
ldm невыровненным быть не может, т.е. оно будет чи...

да, но вот как раз между чтениями 32битных переменных может и вклинится прерывание и сломать всю малину. Ибо асинхронное

Leonid Zaliubovskyi
да, но вот как раз между чтениями 32битных перемен...

ну блин тут мы щас и до РТОСь дойдем а там мьютексы, или ДМА и сброса и инвалидации кэша :)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта