Arduino:Справочник языка Arduino/Область видимости переменных и квалификаторы/volatile: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 14: Строка 14:
== Пример ==
== Пример ==


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
// переключаем светодиод, когда вызывается прерывание, изменением состояния входного пина
// переключаем светодиод, когда вызывается прерывание, изменением состояния входного пина
   
   
Строка 38: Строка 38:


==См.также==
==См.также==
{{ads}}
 


==Внешние ссылки==
==Внешние ссылки==
Строка 44: Строка 44:
<references />
<references />


{{Навигационная таблица/Справочник языка Arduino}}
{{Навигационная таблица/Портал/Arduino}}
{{Навигационная таблица/Arduino библиотеки}}
 
{{Навигационная таблица/Arduino продукты}}
 
{{Навигационная таблица/Arduino/Примеры}}
 
{{Навигационная таблица/Телепорт}}
 


[[Категория:Справочник языка Arduino]]
[[Категория:Справочник языка Arduino]]
[[Категория:Область видимости переменных и квалификаторы языка Arduino]]
[[Категория:Область видимости переменных и квалификаторы языка Arduino]]

Текущая версия от 11:26, 8 июля 2023

Проверка/Оформление/Редактирование: Мякишев Е.А.


volatile

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

Объявление переменной с квалификаторм volatile – это указание для компилятора. Компилятор – это программа, которая переводит текст вашей программы на С/С++ в машинный код, то есть в реальные команды для чипа Atmega в Arduino.

Он указывает компилятору загрузить переменную из ОЗУ, а не из запоминающего регистра – временной ячейки памяти, в которой хранятся переменные программы и производятся операции с ними. При определенных условиях значения переменных, хранящихся в регистрах, могут оказаться неточными.

Переменная должна быть объявлена volatile, когда её значение может быть изменено чем-либо за пределами того участка программы, где она объявлена, например, параллельно выполняющимся процессом. В Arduino единственным местом, где это может проявиться, является участок программы, ассоциированным с прерываниями, вызванный программой обработки прерываний. См. AttachInterrupt()

Пример

// переключаем светодиод, когда вызывается прерывание, изменением состояния входного пина
 
int pin = 13;
volatile int state = LOW;
 
void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}
 
void loop()
{
  digitalWrite(pin, state);
}
 
void blink()
{
  state = !state;
}

См.также

Внешние ссылки