善变的不只是女人,还有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告诉编译器这个变量属于这种(可变的、易变的)情况。

原文地址:https://www.cnblogs.com/yr-linux/p/5079908.html