说明
volatile这个关键字是变量修饰符,常用在变量类型的前面,以告诉编译器和接下来的程序怎么对待这个变量。
声明一个volatile变量是编译器的一个指令。(编译器是一个将你的C/C++代码转换成机器码的软件。机器码是arduino上的Atmega芯片能识别的真正指令。)
具体来说,该指令指示编译器从RAM而非存储寄存器中读取变量,存储寄存器是程序存储和操作变量的内存区域。
当一个变量的控制和改变可能来自程序代码以外的环境,比如在使用Arduino的中断功能时。ISR(中断服务程序)中所涉及的变量需要被声明为volatile易变变量。
示例程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
const byte ledPin = 13; //用2号引脚作为中断触发引脚 const byte interruptPin = 2; volatile byte state = LOW; void setup() { pinMode(ledPin, OUTPUT); //将中断触发引脚(2号引脚)设置为INPUT_PULLUP(输入上拉)模式 pinMode(interruptPin, INPUT_PULLUP); //设置中断触发程序 attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE); } void loop() { digitalWrite(ledPin, state); } //中断服务程序 void blink() { state = !state; } |