AVR Studio编译器会对代码进行了优化,包括对全局变量的一些优化。
优化的情况如下:
若在主函数的死循环中不断地对此全局变量进行判断或者其它,编译器不会每次都从原地址取值(原地址即为全局变量所在的位置),而是从缓存中取值(如Rn寄存器)。即使在其它函数中对此全局变量进行了修改(如中断程序或者其它),也不会影响到主函数对此全局变量的判断(即判断出错)。
解决这种问题的办法就是在定义全局变量时加上volatile关键字(如volatile unsigned char i),以告诉编译器不要对此全局变量进行优化,即每次要用到此全局变量时都从原地址取值。
阅读(3552) | 评论(0) | 转发(0) |