Мне нужно уточнить volatile для C / C ++, потому что здесь был неправильный ответ. Я программирую микроконтроллеров с 1994 года, где это ключевое слово очень полезно и часто нужно.
volatile никогда не сломает ваш код, его использование никогда не рискованно. Ключевое слово в основном гарантирует, что переменная не оптимизирована компилятором. Худшее, что может случиться, если вы злоупотребите этим ключевым словом, это то, что ваша программа будет немного больше и медленнее.
Вот когда вам нужно это ключевое слово для переменной:
- У вас есть переменная, которая записана внутри функции прерывания.
А ТАКЖЕ
- Эта же переменная читается или записывается во внешние функции прерывания.
ИЛИ ЖЕ
Если у вас есть две функции прерывания с различным приоритетом, которые используют переменную, вам также следует использовать 'volatile'.
В противном случае ключевое слово не нужно.
Что касается аппаратных регистров, они должны рассматриваться как изменчивые, даже без ключевого слова, если вы не делаете странные вещи в своей программе.