操作系统(如UCOS)开关总中断与中断丢失的问题讨论
在有操作系统如UCOS的设计中,外设如串口,接收到数据往往要入环型缓冲区中,放入的时候就会关开总中断,从环型缓冲区取数也要关开中断.问题是在关闭中断期间,如果有其它的外设的中断或外部中断到来,那么不就会丢失中断吗?假如串口关开中断处理用了0.2us(假设MCU是Cortex-M3),而另有两个外设在200us左右(发生时间是随机的,但最小间隔是200us)发生一次,那么就有0.2/200*2,即约等于千分之二的机会会丢失数据. 1,中断嵌套
2,中断时间尽量短
3,采用DMA 关注 ....问题是在关闭中断期间,如果有其它的外设的中断或外部中断到来,那么不就会丢失中断吗? ...
-----------------------------------------------------------------------
确实会导致其他中断的延时,但未必会丢失,而中断的过长延时可能会造成一定的问题比如串口FIFO满了没能及时处理。
回复【1楼】ralfak
1,中断嵌套
...
-----------------------------------------------------------------------
“关闭中断”目的是为程序在多任务环境下提供临界保护,所以中断嵌套是不能解决这个问题的。
正确的做法是选择正确的切入点关闭中断,尽量缩短关闭中断的时间,并在关闭中断期间速战速决。
如果中断频繁的话宜选用高主频的CPU,再高的话只能由硬件完成,并把这个硬件部分作为CPU的一个外设。 回复【3楼】akin
....问题是在关闭中断期间,如果有其它的外设的中断或外部中断到来,那么不就会丢失中断吗? ...
-----------------------------------------------------------------------
确实会导致其他中断的延时,但未必会丢失,而中断的过长延时可能会造成一定的问题比如串口fifo满了没能及时处理。
回复【1楼】ralfak
1,中断嵌套
...
-----------------------------------------------------------------------
“关闭中断”目的是为程序在多任务环境下提供临界保护,所以中断嵌套是不能解决这个问题的。
正确的做法是选择正确的切入点关闭中断,尽量缩短关闭中断的时间,并在关闭中断期间速战速决。
如果中断频繁的话宜选用高主频的cpu,再高的话只能由......
-----------------------------------------------------------------------
支持 确实会导致其他中断的延时,但未必会丢失
--------------------------------------------------------------------
谢谢3楼
页:
[1]