think_a_second 发表于 2010-5-12 14:40:08

操作系统(如UCOS)开关总中断与中断丢失的问题讨论

在有操作系统如UCOS的设计中,外设如串口,接收到数据往往要入环型缓冲区中,放入的时候就会关开总中断,从环型缓冲区取数也要关开中断.问题是在关闭中断期间,如果有其它的外设的中断或外部中断到来,那么不就会丢失中断吗?
假如串口关开中断处理用了0.2us(假设MCU是Cortex-M3),而另有两个外设在200us左右(发生时间是随机的,但最小间隔是200us)发生一次,那么就有0.2/200*2,即约等于千分之二的机会会丢失数据.

ralfak 发表于 2010-5-24 16:04:59

1,中断嵌套
2,中断时间尽量短
3,采用DMA

eworker 发表于 2010-5-24 16:10:46

关注

akin 发表于 2010-5-28 00:07:31

....问题是在关闭中断期间,如果有其它的外设的中断或外部中断到来,那么不就会丢失中断吗? ...
-----------------------------------------------------------------------
确实会导致其他中断的延时,但未必会丢失,而中断的过长延时可能会造成一定的问题比如串口FIFO满了没能及时处理。


回复【1楼】ralfak
1,中断嵌套
...
-----------------------------------------------------------------------
“关闭中断”目的是为程序在多任务环境下提供临界保护,所以中断嵌套是不能解决这个问题的。
正确的做法是选择正确的切入点关闭中断,尽量缩短关闭中断的时间,并在关闭中断期间速战速决。
如果中断频繁的话宜选用高主频的CPU,再高的话只能由硬件完成,并把这个硬件部分作为CPU的一个外设。

eworker 发表于 2010-5-28 09:44:13

回复【3楼】akin
....问题是在关闭中断期间,如果有其它的外设的中断或外部中断到来,那么不就会丢失中断吗? ...
-----------------------------------------------------------------------
确实会导致其他中断的延时,但未必会丢失,而中断的过长延时可能会造成一定的问题比如串口fifo满了没能及时处理。
回复【1楼】ralfak
1,中断嵌套
...
-----------------------------------------------------------------------
“关闭中断”目的是为程序在多任务环境下提供临界保护,所以中断嵌套是不能解决这个问题的。
正确的做法是选择正确的切入点关闭中断,尽量缩短关闭中断的时间,并在关闭中断期间速战速决。
如果中断频繁的话宜选用高主频的cpu,再高的话只能由......
-----------------------------------------------------------------------

支持

think_a_second 发表于 2010-6-28 16:34:29

确实会导致其他中断的延时,但未必会丢失
--------------------------------------------------------------------
谢谢3楼
页: [1]
查看完整版本: 操作系统(如UCOS)开关总中断与中断丢失的问题讨论