volatile
volatileキーワードは変数修飾子として知られています。 これは通常、変数のデータ型の前に使用され、コンパイラが変数を処理する方法を変更します。
変数でvolatileを宣言はコンパイラへの指示になります。 コンパイラはC ++コードをマシンコードに変換するソフトウェアで、マシンコードはMaple(Arduino STM32)のSTM32チップの実際の命令です。 (Mapleで使用するコンパイラは、GCCの系列です)。
具体的には、変数を使用するたびに値を "バックアップ"し、そのバックアップコピーから読み込むのではなく、変数の値を新鮮に読み込むようにコンパイラに指示します。 (コンパイラは、RAM内の変数の値をレジスタと呼ばれる格納場所に「バックアップ」します;これは効率のために行われます)。
変数は、その値が外部割り込みなどのコードセクションの制御を超えて何かによって変更されるときはいつでも、volatile宣言されるべきです。 (これはほとんどのプログラムで発生する可能性が高い唯一の場所は、割り込みによって呼び出されるコードの内部です)。
利用例
code:sample.ino
// 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;
}
}
関連項目
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。