Ключевое слово 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 #РазработкаПрограммного ...