keil里面的if(key1==0)前面加了while(1)此后不管key1是不是等于0,if后面的执行语句都没有反应了

是不是被编译器优化掉了????
2025-03-24 10:21:40
推荐回答(5个)
回答(1):

key1变量的赋值是在中断程序里吧?如果是这样,变量key1申明时应该加上关键字volatile,如volatile char key1;不加此关键字编译器会把当前局部的key1变量优化成一个寄存器变量,永远不去读取全局变量,你去看看汇编代码就知道了。新手进阶时都会碰到此问题,恭喜你要步入老手行列了!
回答完了才看到你采用降低优化等级来绕过,这是治标不治本的办法,当你程序太大了或其它什么原因需要提高优化等级时你现在采用的办法不可行。

回答(2):

你的key1是什么?是外部中断里改变的变量吗,你敢把中断程序放上来吗?如果是,你是不是没有进中断啊?或者进来中断就没出来了

回答(3):

应该不是,我觉得是单片机执行太快,你的按键效果不好。加上延时试试!

回答(4):

这得看你的key1是什么了,这里的key1是要在循环的时候被动态改变的,凡是指向硬件地址或在定时器里改变的都可以,如果不是那就是你这种情况了。你可以调试打断点看看。

回答(5):

我暂时看不出什么门道,但我觉得正一兄的说法很可能,按键我在用的时候都要延时判断是不是真的被按下了,延时20ms