KEIL MDK 的优化

用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

 

 

你可能感兴趣的:(优化)