IAR debug模式 默认option选择 low,release模式下默认选择 high,代码在选择low时运行正常,设置为high就出错 ,如下
data[] ={0xAA,0x11};
if ((data[0]&0x0f) == 0x00)
{
..............
}
low设置下可以进入,high设置下程序首次运行可以进入,以后就不能进入了。debug调试发现运行时判断条件值竟然为data[0]的值,也就是0xAA
分析原因,data[0]值已赋值,如果期间未被改变时,判断条件也会变成确定值会被优化掉。
由于data[0]的值已确定,判断的条件的值也已确定,所以会被优化。可以改为如下进行测试
volatile char a;
a=1;
data[0]=a;//保证data[0]的值不是确定的
uint8 tmp;
tmp = data[0]&0x0f;
if(tmp == 0x00)