日期:2014-05-16  浏览次数:20689 次

没分了,真诚请教linux中断冲突的问题
机器一直通过串口在采集数据,这时我用外部的一个中断管脚EINT2来接收外部的命令。
结果发现,中断有时候不响应,杯具的是我还必须用几个中断组合形成外部命令。

最后发现问题是:串口采集程序一直在调用一个中断,尽管是tasklet,但是仍然会有很短的一段时间屏蔽中断,导致我这个中断不响应。怎么样才能让我的EINT2中断优先级大于串口中断呢,也就是这个中断来临先处理我这个。

系统:linux2.4, 芯片2410,串口使用的IRQ_RXD1, IRQ_RXD2.
请教一种解决方案,哪怕给出一个降低冲突的途径。PS:我不能修改串口内核,让其变成轮询控制。

------解决方案--------------------
晕,改不了串口驱动,还改不了你的EINT2呀
------解决方案--------------------
我记得在哪本书里看到过:
linux不是一个实时的处理系统,其最初的设计思想是让所有的进程获得平均的处理时间。
在2.6内核中对这点做了大量的修改,Linux有了一定的实时性。但是我觉得还是不能称之为实时操作系统。
至于中断,情况比进程能好点,不过如果我没有记错的话,至少在2.4内核下,linux不支持中断的嵌套。
就是说在中断的前半段,其他中断都会被屏蔽。

上面是我从一些书里看到的,实际情况如何我没有用过,不十分确定。
------解决方案--------------------
用tasklet,或者工作队列试试中断处理程序的下半部,在中断处理程序的上半部,尽量"少做事"。