新手上路
- 积分
- 32
- 金钱
- 32
- 注册时间
- 2019-6-16
- 在线时间
- 27 小时
|
10金钱
[ 本帖最后由 yuyan 于 2019-6-27 15:12 编辑 ]\n\n我把按键设置了外部中断,在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...
} |
|