当前位置: 代码迷 >> 单片机 >> 如果中断执行时,来了一个低优先级的中断,是怎么办的
  详细解决方案

如果中断执行时,来了一个低优先级的中断,是怎么办的

热度:355   发布时间:2016-04-28 14:46:22.0
如果中断执行时,来了一个低优先级的中断,是怎么处理的?
本帖最后由 fengyunjh6 于 2014-07-31 18:09:41 编辑
这个低优先级的中断会丢掉吗?
就拿51单片机来说
------解决思路----------------------
不用想那么复杂,什么队列。

可以这样理解:

一个中断源发生中断请求时,中断控制单元首先判断当前是否有中断,它是否比当前服务的中断优先级高,是否有多个待执行的中断:

* 如果当前没有正在服务的中断,判断是否有其他待处理的高优先级中断。如果没有,执行;否则,挂起,先执行高优先级中断。

* 如果当前有正在服务的中断,判断新中断是否有更高优先级。如果是,打断上一个中断,启动新中断;否则,挂起。

在一个中断服务完成时,中断控制单元清除该中断标志(如果是这样设计的),判断是否有挂起的中断,选择优先级最高的执行。

实际上,中断控制单元就是在对所有中断源的中断请求信号进行判断和处理。一个中断请求,实际上就是一路信号有效(比如置位 高电平);所谓挂起,可以理解为暂时不理睬它。
------解决思路----------------------
引用:
不用想那么复杂,什么队列。

可以这样理解:

一个中断源发生中断请求时,中断控制单元首先判断当前是否有中断,它是否比当前服务的中断优先级高,是否有多个待执行的中断:

* 如果当前没有正在服务的中断,判断是否有其他待处理的高优先级中断。如果没有,执行;否则,挂起,先执行高优先级中断。

* 如果当前有正在服务的中断,判断新中断是否有更高优先级。如果是,打断上一个中断,启动新中断;否则,挂起。

在一个中断服务完成时,中断控制单元清除该中断标志(如果是这样设计的),判断是否有挂起的中断,选择优先级最高的执行。

实际上,中断控制单元就是在对所有中断源的中断请求信号进行判断和处理。一个中断请求,实际上就是一路信号有效(比如置位 高电平);所谓挂起,可以理解为暂时不理睬它。


最近的那一次是不会丢失,但如果在处理高优先级中断的时候,低优先级的中断来过好几次,那就会有丢失了。


如果高优先级ISR代码写得不好,又或者优先级设置不合理,又或者低优先级中断间隔很短。在高优先级中断ISR中的时候,低优先级中断已经来过至少2次,那必然丢失1次,最近的那次是不会丢失。

比如说TImer中断优先级高,TImer的ISR要占用较长时间,又或者TImer中断频率过高,低优先级的Uart中断的ISR就不会有足够的时间运行了,丢失的情况是有的。
  相关解决方案