[ 本帖最后由 yuyan 于 2019-6-27 15:12 编辑 ]
我把按键设置了外部中断,在while(1) 中放了switch...case 语句检查按键状态并进行相应处理(里面也是一些switch...case语句,从入口进去case下只有四五条简单语句),之后将按键状态置0以便下一次检测,实际跑的时候经常有卡顿(按键不灵),怀疑按键中断发生在switch..case 语句和按键置0语句之间,于是在这段前后关闭中断,果然变得非常流畅。可是当我把关中断单独放在switch...case语句前后或者按键置0语句前后,按键还是不灵敏。这就有点邪门,难道按键中断有那么高的几率正好发生在switch...case之后和按键置0之前的这个空当里?还是说switch...case语句执行效率实在太慢,以至于每次按键中断来临的时候,还在case语句中逐条检查按键状态?其实我是不希望在switch...case中关闭中断的,因为有些按键处理需要中断介入,有什么好办法不影响按键流畅度吗?
while(1)
{
value = __get_PRIMASK();
__set_PRIMASK(1);
switch(key_pressed)
{
case KEY1_PRESS:
key1_process();
break;
case KEY2_PRESS:
key2_process();
break;
case KEY3_PRESS:
key3_process();
break;
case KEY4_PRESS:
key4_process();
break;
case KEY5_PRESS:
key5_process();
break;
case KEY6_PRESS:
key6_process();
break;
}
//按键中断正好发生在此处空当?
key_pressed = 0; //清除按键标志
__set_PRIMASK(value);
lcd_show();
other_statements...
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>