volatile — Maple v0.0.11 Documentation

### Navigation

- next
- previous |
- LeafLabs |
- Index »
- Complete Language Index »

# `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

- External Interrupts
- attachInterrupt()
- detachInterrupt()

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.

### Navigation

- next
- previous |
- LeafLabs |
- Index »
- Complete Language Index »