用KEIL MDK uVision4,如下程序,GPS_flg 是一个全局变量,当有GPS数据时就会中断被置1,结果我在while(1)外面判断GPS_flg就始终为0,进入死循环出不来,在while(1)里面就可以判断到GPS_flg为1,最后找不到问题,把优化level1改成level0就好了。折腾了半天时间,难道优化这么恐怖?
main()
{...
while(GPS_flg == 0)
{;}
while(1)
{
if(GPS_flg == 0)
i++;
if(GPS_flg == 1)
{
xprintf("i = %d/r/n", i++);
i=0;
}
...
}
}
下面是论坛大哥们的发言:
Keil不优化的时候,所有变量用到时必然会从内存读。开了优化就可能寄存器。
中断要设置的变量 最好 volatile
虽然我已经试过了volatile,不行,但从今以后一定会加上volatile这点
Keil RMDK 默认优化是LEVEL 2