本帖最后由 sowin2001 于 2012-10-23 10:41 编辑
出现个奇怪的现象,测试APP程序很简单:
u8_t a, b ;
void main (void)
{
//已经初始化中断向量重指向APP的0x08004000
//初始化定时器
while (1)
{
if (a == b)
continue;
a = b ;
灯状态取反 ;//灯闪
}
}
定时器中断中就清除定时器中断标志,没有对a, b操作;
IAP:0x08000000~0x08003FFF,APP:0x08004000~0x0801FFFF,
按道理,这个灯状态不会取反,就算a,b没有初始化,灯状态最多取反一次而已,但只要一开定时器中断,灯状态就不定的取反,频率正好是定时器的时间;
在Release中将优化等级改成Low(之前是High),不会出现问题;
在Release中将优化等级还改成High,连接仿真器,在without download下开启仿真,立即又退出仿真,既然也能正常运行,此时就算拔了仿真器,正常运行!
看上去貌似是IAR把什么给优化没有了,但同样是优化过的程序,在不下载开启仿真能正常运行又推翻了优化的问题!
不知各位大侠有遇到过的吗? |