这个低优先级的中断会丢掉吗?
就拿51单片机来说
------解决思路----------------------
不用想那么复杂,什么队列。
可以这样理解:
一个中断源发生中断请求时,中断控制单元首先判断当前是否有中断,它是否比当前服务的中断优先级高,是否有多个待执行的中断:
* 如果当前没有正在服务的中断,判断是否有其他待处理的高优先级中断。如果没有,执行;否则,挂起,先执行高优先级中断。
* 如果当前有正在服务的中断,判断新中断是否有更高优先级。如果是,打断上一个中断,启动新中断;否则,挂起。
在一个中断服务完成时,中断控制单元清除该中断标志(如果是这样设计的),判断是否有挂起的中断,选择优先级最高的执行。
实际上,中断控制单元就是在对所有中断源的中断请求信号进行判断和处理。一个中断请求,实际上就是一路信号有效(比如置位 高电平);所谓挂起,可以理解为暂时不理睬它。
------解决思路----------------------
最近的那一次是不会丢失,但如果在处理高优先级中断的时候,低优先级的中断来过好几次,那就会有丢失了。
如果高优先级ISR代码写得不好,又或者优先级设置不合理,又或者低优先级中断间隔很短。在高优先级中断ISR中的时候,低优先级中断已经来过至少2次,那必然丢失1次,最近的那次是不会丢失。
比如说TImer中断优先级高,TImer的ISR要占用较长时间,又或者TImer中断频率过高,低优先级的Uart中断的ISR就不会有足够的时间运行了,丢失的情况是有的。