IAR debug 模式 option选择 high后编译出错
IAR debug模式 默认option选择 low,release模式下默认选择 high,我的代码在选择low时运行正常,设置为high就出错 ,如下data[] ={0x10,0xff};
if ((data&0x0f) == 0x00)
{
..............
}
low设置下可以进入,high设置下只有程序运行第一次进入,以后都不行,debug调试发现运行时判断条件值竟然为data的值,也就是0x10 顶一顶啊,高手解答一下啊,纠结一天了 没人答复,问题解决,release模式下用个tmp变量,将变量用volatile申明就不会出现问题,
volatile uint8 tmp;
tmp = data&0x0f;
if(tmp == 0x00)
{
}
不过还是没搞懂,data&0x0f竟然会在release模式下被优化掉 搜整型提升
并谨记中间变量默认是int
测试时不要用
data[] ={0x10,0xff};
if ((data&0x0f) == 0x00)
data值已赋值期间未被改变时判断条件也会变成确定值会被优化掉 回复【3楼】AIDN
-----------------------------------------------------------------------
有道理,但之前用这个代码也不行
uint8 tmp;
tmp = data&0x0f;
if(tmp == 0x00)
{
}
else if (tmp == 0x01)
{
}
.....
必须tmp变量加volatile 申明,而我自己测试另一段代码时 tmp = data&0xf0是可以的,取低4位咋就被优化呢 很简单因为data的值已确定,判断的条件的值也已确定,所以会被优化。要想测试
volatile char a;
a=1;
data=a;//保证data的值不是确定的
uint8 tmp;
tmp = data&0x0f;
if(tmp == 0x00) 回复【5楼】AIDN
-----------------------------------------------------------------------
好的,多谢,确实是这样的现象,看来这个IAR的优化还是需要多注意些
页:
[1]