善变的不只是女人,还有volatile ---偷来的标题名
下面代码包括 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告诉编译器这个变量属于这种(可变的、易变的)情况。