Volatile

Материал из MK90.ORG wiki
Перейти к: навигация, поиск

Справка Язык | Библиотеки | Сравнение | Изменения

volatile

Описание

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

Компилятор - это часть ArduinoIDE, транслирующая программу на языке Wiring (или, C/C++) в конкретные машинные инструкции микроконтроллера Arduino. В процессе трансляции компилятор может самостоятельно решать, где расположить переменную - в специальной временной ячейке памяти SRAM или в одном из регистров. Однако, в некоторых случаях (например, при обработке прерываний) переменная, размещенная в регистре, может потерять актуальность.

Запомните простое правило: переменная, которая может изменяться во время обработки прерывания (в "классическом" C/C++ это может быть и другой поток), должна быть объявлена как volatile.

Пример


// переключает светодиод по изменению состояния пина 

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE); // устанавливаем обработчик прерывания - blink()
}

void loop()
{
  digitalWrite(pin, state); 
}

void blink()
{
  state = !state; // обработчик прерывания меняет переменную, следовательно она должна быть volatile!
}

Смотри также

Руководство по Wiring


Исправления, пожелания и новые статьи должны быть опубликованы через Форум.

Оригинальные тексты руководств и переводы распространяются Arduino и MK90 на условиях лицензии Creative Commons Attribution-ShareAlike 3.0 License. Примеры исходных кодов и ссылки являются общественным достоянием.