volatile与Warning[Pa082]告警

又一次说volatile的问题,在使用IAR进行STM32开发时遇到的问题,编译发现工程中有一个告警
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
出现这个告警的原因是:在某个二元操作中,使用volatile变量是编译器无法确定操作数引用的顺序。(具体函数我还是不太明白,这里是看到其他网友的给的原因。)
这个告警在我自己的工程中也遇到过,大意是volatile变量不支持该运算符。
代码大体如下:
__IO u16 sum=0;
for(i=0;i<8;i++)
{
sum += ADCPowerValue;
}
原作者吧sun定义为volatile类型其实是没有必要的,这里ADCPowerValue是寄存器的值,在使用是应该拷贝到一个普通变量中,再使用该寄存器的拷贝参与计算。

合理的写法应该是这样:
int i;
__IO u16 sum=0;
u16 Temp = 0;
for(i=0;i<8;i++)
{
Temp = ADCPowerValue;
sum += Temp;
delay_10us(1);
}

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/volatile%e4%b8%8ewarningpa082%e5%91%8a%e8%ad%a6/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名