我正在使用atmel studio 7.我有一个关键检测逻辑,可以在关闭优化(-O0)时起作用,但在打开时不起作用。我正在使用ISR检测密钥,有四个按键以this Image
的矩阵方式连接到PORTB 0..3PB2和PB3始终设置为输入上拉。我在输入三态和输出低之间切换PB0和PB1(仅使用DDRB0和DDRB1位)。以下是关键检测逻辑(内部ISR):
uint8_t tmp=0,v=0;
for(uint8_t i=0;i<2;i++){
DDRB=(DDRB&0xFC)|(0x01<<i);
tmp=(~PINB)&0x0C;if(tmp!=0x00) v=v|tmp|(0x01<<i);
DDRB=DDRB&0xFC;while((PINB&0x0C)!=0x0C); //This line
}
选择'优化尺寸(-Os)'。当我按下任意键时,删除'tmp'的第5行值变化。否则tmp始终读为零。我需要第5行去抖动逻辑。
那么,我在这里错过了什么?