善变的不只是女人,还有volatile ---偷来的标题名

本文探讨了温度传感器数据读取的中断服务程序及主循环中的数据一致性检查。指出未使用volatile修饰符可能导致的问题,并解释了volatile的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面代码包括 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值