volatile

The volatile keyword known is a variable qualifier. It is usually used before the datatype of a variable, to modify the way in which the compiler treats the variable.

Declaring a variable volatile is a directive to the compiler. The compiler is software which translates your C++ code into the machine code, which are the real instructions for the STM32 chip in the Maple. (The particular compiler we provide for use with the Maple is a version of GCC).

Specifically, it directs the compiler to read the variable’s value fresh every time it is used, rather than “backing up” the value and reading from its backup copy. (Compilers often “back up” a variable’s value in RAM into a storage location called a register; this is done for efficiency).

A variable should be declared volatile whenever its value can be changed by something beyond the control of the code section in which it appears, such as an external interrupt. (The only place that this is likely to occur in most programs is inside of code called by interrupts).

Example

// toggles LED when interrupt pin changes state

int pin = 13;
volatile int state = LOW;

void setup() {
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

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

void blink() {
  if (state == HIGH) {
    state = LOW;
  } else {
    // state must be HIGH
    state = HIGH;
  }
}

See Also

License and Attribution

Portions of this page were adapted from the Arduino Reference Documentation, which is released under a Creative Commons Attribution-ShareAlike 3.0 License.