0

我正在使用 atmel studio 7。我有一个关键检测逻辑,当优化关闭(-O0)时有效,但在打开时无效。我正在使用 ISR 检测密钥,有四个键以矩阵方式连接到 PORTB 0..3,如下图所示

PB2 和 PB3 始终设置为输入上拉。我在 Input-Tristate 和 Output-Low 之间切换 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 行用于去抖动逻辑。

那么,我在这里缺少什么?

4

0 回答 0