打印

在IAR中,是不是所有的外部变量都要用volatile来限定?

[复制链接]
6587|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
areshan|  楼主 | 2010-6-10 13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在用IAR的时候,怎么有这样奇怪的事情?
volatile static uchar power; //定义一个外部变量
当时在中断函数里,加入这样的式子power=power+sum,怎么提示警告Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
但是把开头的volatile去掉才没有警告了。。。。volatile的作用就是不让编译器别把它定义的变量给优化掉了吗。。。。。。
还有就是用volatile static uchar power 这样定义变量就算后面没有用到,也不会提示。而没有用volatile的外部变量,没有用到就要提示警告了......该怎样理解呢???

相关帖子

沙发
ShakaLeo| | 2010-6-10 15:12 | 只看该作者
power和sum这两个变量都是volatile的吧,volatile字面意思是“易失,易挥发”的意思,加了这个修饰的变量,编译器在每次使用它的时候都要从该变量的内存地址取出变量值,而不能使用暂存在寄存器中的值。如果power和sum都是volatile型的,编译器在做power+sum运算的时候就不能绝对地不使用寄存器中的值,取变量值肯定会有先有后,然后再相加。而这个取变量的先后顺序是未定义的,所以出现了那个警告。

使用特权

评论回复
板凳
zkkov2000| | 2010-6-12 15:06 | 只看该作者
最好全都加上volatile

使用特权

评论回复
地板
machunshui| | 2010-6-12 16:56 | 只看该作者
对非操作系统的裸奔来说,
被中断函数和普通函数共同用到的全局变量需要加,
其他不需要

使用特权

评论回复
5
ayb_ice| | 2010-6-12 17:14 | 只看该作者
没有这回事,
建议中断中使用的全局变量加

使用特权

评论回复
6
zkkov2000| | 2010-6-14 13:34 | 只看该作者
中断里的变量加,拿不准的也加,放心

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝