ISR处理时间为什么不能太长?

姓名:宋子璇

学号:16020199060

转载自:https://zhuanlan.zhihu.com/p/21704605

【嵌牛导读】:ISR处理时间太长的弊端

【嵌牛鼻子】:ISR

【嵌牛提问】:ISR处理时间为什么不能太长?

【嵌牛正文】:

我们都知道中断都具有自己的优先级,在STM32中,ST提供的库函数就可以通过软件的方式更改各个中断的优先级。高优先级的中断能抢占低优先级的ISR(中断服务例程)的执行,同等级的中断或者更低等级的中断只能在该中断执行之后再执行。

根据以上的解释可以看出,ISR时间太久。

1、可能引起低优先级的中断丢失。

当在ISR运行期间,低优先级的中断进入量大于一次,则会引发中断丢失。考虑这样一个情景,如果一个高优先级持续了1s,而按键的优先级低于该中断,则在这一秒钟无论按了多少次按钮,即使ISR运行结束,也最多只会执行一次按键ISR。

2、中断延时

同样若高优先级ISR运行时,有其他低优先级中断发生,则低优先级的中断只会在高优先级ISR执行完之后再开始执行。导致中断的不可预测的延时。

为了解决这个问题,可以做如下的改进

将一个ISR(中断服务例程)分割为两个部分一部分运行在ISR中,另一部分运行在任务代码中。运行在ISR中这部分代码主要处理给出中断的设备,并将服务请求送到对应的任务,让其余部分的代码在任务中执行。

这样做有2个原因。

1、可以减少ISR的处理时间。

2、在实际使用单片机的过程中,虽然使用了中断,但其并没有非常高的优先级。例如,针对按键的处理,人的反应是比较有限的,有些按键事件只需要在比较长的时间内做出反应就可以了,并不需要即时反应出来,此时中断只起到一个获取按键事件的作用,对于按键的处理可以放到任务中来处理。

你可能感兴趣的:(ISR处理时间为什么不能太长?)