下面代码包括 2 个函数,第一个函数是中断服务程序用于从温度传感器中读 取数据,第二个函数比较温度是否一致。它是否包括错误?如有,该如何修正?
1 static int iTemperatures[2]; 2 3 void __IRQ__vReadTemperatures(void) 4 { 5 iTemperatures[0] = /* Get Temperature from Sensor */ 6 iTemperatures[1] = /* Get Temperature from Sensor */ 7 } 8 9 void main(void) 10 { 11 while (1) 12 { 13 if (iTemperatures[0] != iTemperatures[1]) 14 /* Alarm */15 } 16 }
错误的主要原因是因为,volatile。
(中断isr中引用的变量,多线程中共用的变量,硬件会更改的变量)都是编译器在编译时无法预知的更改,此时应用使用volatile告诉编译器这个变量属于这种(可变的、易变的)情况。