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

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

по мне. Как сделать там синхронизацию без такого говнокода? Систему считаем одноядерной, бареметал. Буду рад конструктивным предложениям с хорошей производительностью, т.к. volatile часть их теряет

26 ответов

27 просмотров
Alex- Автор вопроса

@vpclmulqdq, у тебя есть конкретные предложения по этому вопросу? Цель - избежать volatile для переменной, которую устанавливают в прерывании.

Alex
@vpclmulqdq, у тебя есть конкретные предложения по...

зачем его избегать? атомик через ex монитор будет дороже

Alex- Автор вопроса
Ivan Sokolov
atomic

у нас нет pthread. Вообще. Никакой. Нету ОС ведь

Alex
у нас нет pthread. Вообще. Никакой. Нету ОС ведь

в АРМе атомики работают через эксклюзивный монитор, ему ОСь и потоки не нужны. Он же часть ядра.

Alex
у нас нет pthread. Вообще. Никакой. Нету ОС ведь

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

Alex- Автор вопроса
Stas Koynov
в АРМе атомики работают через эксклюзивный монитор...

Как я понимаю, для этого нужен хотя бы Cortex M4. А как жить на M0/M0 Plus?

Alex- Автор вопроса
Ivan Sokolov
для lockless атомиков никакие треды не нужны. это ...

Подумаю, почитаю, спасибо. В newlib такие с коробки, надеюсь

Alex
Как я понимаю, для этого нужен хотя бы Cortex M4. ...

монитор есть начиная с ARMv7-M, на М0 вроде это уже ARMv6-M там монитора нет, там уже считают пузатой мелочью, там вам должно хватать on/off_irq

Alex- Автор вопроса
Stas Koynov
монитор есть начиная с ARMv7-M, на М0 вроде это уж...

irq on/off - это наша критическая секция (быстрая и прекрасно работающая). Для поллинга флага предлагаешь постоянно делать on-off для прерываний?

я вам говорил, как заменить монитор на М0, причем тут полинг. Если просто полинг то волотайл, если нужна атомарность, юзай монитор, нет монитора юзай on/off_irq

В гцц есть встроенные атомики (__atomic_xxx функции). Все что следует знать. volatile нельзя толком использовать даже на одноядерной машине, т.к. саму запись в volatile-переменную компилятор может выполнить не в той же строчке, а когда-нибудь потом. Если его не принудить конечно через asm("" ::: "memory"). Когда-нибудь потом -- это в конце функции запросто. Если в функции записывается volatile, потом какой-то вечный цикл, а потом выход, то запись volatile может запросто съехать после цикла. Что следует понимать.

Alex
@vpclmulqdq, у тебя есть конкретные предложения по...

Ввести компиляторный барьер руками через clobbers в asm-вставке. Не обязательно "memory", clobber-ить можно только одну единственную переменную (так код будет эффективней). Это нужно сделать при записи. И при чтении. Проще использовать __atomic_xxx функции. Там всё само.

Stas Koynov
я вам говорил, как заменить монитор на М0, причем ...

Есть ещё алгоритмы Деккера, Петерсона и Лэмпорта. Но им volatile тоже нужен.

Alex
@vpclmulqdq, у тебя есть конкретные предложения по...

https://en.cppreference.com/w/c/atomic Есть в C11, Но если у тебя ничего нет то юзай volatile

Alex- Автор вопроса
Jokhar Ali
https://en.cppreference.com/w/c/atomic Есть в C11,...

Почему-то мой мозг все ещё живёт в с99. Спасибо, буду пробовать переводить проект на них. Главное, чтобы компилятор был с атомиками. А то он может определить, что их нет, и я снова отправлюсь в далёкое путешествие по просторам volatile

Alex
Почему-то мой мозг все ещё живёт в с99. Спасибо, б...

давно все есть атомики для АРМа появились в гцц с 4.9.2 версии

Alex
Почему-то мой мозг все ещё живёт в с99. Спасибо, б...

Давно пора переходить на C23, где специально для ембеддеров ввели директиву #embed.

Alex- Автор вопроса
Kirill Frolov
Давно пора переходить на C23, где специально для е...

Ещё бы все вендоры свои компиляторы пообновляли - цены бы им не было

Alex
Ещё бы все вендоры свои компиляторы пообновляли - ...

Это была шутка, embed это директива чтобы встраивать данные, как include, но для бинарей

Alex
Ещё бы все вендоры свои компиляторы пообновляли - ...

Ну АРМ собрал последний на сколько помню gcc 12.3 достаточно свежий.

Alex- Автор вопроса
Alex
Но мы ни одним армом едины(

ну началось... ладно я тогда ливаю, с вашими PIC avr и иже с ними

Alex- Автор вопроса
Stas Koynov
ну началось... ладно я тогда ливаю, с вашими PIC a...

Вот да. Даже с теми же армами иногда нужен компилятор именно от вендора, т.к. есть необходимость интеграции с какими-то программными компонентами того же вендора

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта