Перейти к содержимому

Ключевое слово volatile в Embedded C

Embedded Software for Dummies

0:00 / 0:00

Ключевое слово volatile в Embedded C

574 просмотра · 3 мес. назад
Embedded Software for Dummies
1,07 тыс. подписчиков
574 просмотра · 3 мес. назад
Что на самом деле означает `volatile` в Embedded C? Многие разработчики усваивают простое правило: «Используйте volatile для переменных, изменяемых внутри прерываний». Это правило полезно, но неполно. В этом видео мы объясняем истинное назначение `volatile`, как оптимизация компилятора влияет на разделяемые переменные, почему аппаратные регистры часто объявляются volatile и что не решает `volatile`. Мы рассмотрим: Что означает `volatile` в Embedded C Почему важна оптимизация компилятора Переменные, разделяемые в обработчиках прерываний и основном цикле Примеры системных тактов и флагов Периферийные регистры, отображаемые в память Опрос регистров состояния оборудования Изменчивые указатели `const volatile` Почему `volatile` не обеспечивает атомарность Состояния гонки и разделяемые данные `volatile` против мьютекса, семафора, очереди и критической секции Примеры планировщиков и конечных автоматов Распространенные ошибки с `volatile` в реальном программном обеспечении Один из важнейших уроков: `volatile` решает проблему видимости компилятора. Он не решает автоматически проблемы синхронизации, параллелизма или атомарности. Это видео особенно полезно для начинающих и младших разработчиков встроенного программного обеспечения, которые хотят понять, почему некоторые программы работают в режиме отладки, но дают сбой после включения оптимизации компилятора. Прежде чем объявить переменную `volatile`, спросите себя: «Может ли этот объект изменяться вне обычного потока выполнения программы, видимого компилятору?» Затем спросите: «Достаточно ли `volatile`, или есть ещё проблема атомарности или синхронизации?» Ключевое сообщение: `volatile` — это не инструмент синхронизации. Это контракт с компилятором о том, как может изменяться объект. #ВстроенныеСистемы #ВстроенныйC #Volatile #РазработкаПрограммного ...