我在要用到5个独立按键所以就想着用5个外部中断,但是在实际操作中,我发现外部中断不能很好的触发和运行,有时按下按键不能触发,需要多按几次,但是有时候按一下触发好几次,一开始我以为是按键抖动问题,但是加了延时和消抖还是没有什么效果,还有一个就是我触发中断后,等一会它自己就又触发一次,很郁闷。这都是什么情况引起的。我现在程序是用的UCOSII系统,中断也是加在这里面的。我还是按照没有系统写的中断服务程序。
void EXTIX_Init(void)
这个问题,我有两个疑问。
1、你使用了外部中断,不外乎想保证这个信号的最快执行性。但你加了10MS的延时,,我觉得你还不如使用扫描的方式。
如果你想使用外部中断的方式,我有个建议: 初始化,打开外部中断, 当中断发生时,在中断函数中关闭信号的中断,并且产生一个信号量。
在任务中,建一个高优先级的函数,专门处理这个信号量。信号量处理完成,在打开中断。依次循环。
即使你要按键消抖动,延时也加载主任务中,保证中断函数快进快出。
2、在中断函数中,需要加入临界段代码保护,及中断的时候不允许系统调度。
你的延时函数是怎样的,放上来看一下
此外,谨慎在中断里面加延时,会出现一些找不到原因的BUG的