关于Linux的中断处理中断处理Linux和待处理中断
在我的司机基本的问题,我禁止外的中断线路,并做一些处理,在此期间,外围设备发送中断。当我启用中断线时,我收到了当时发生的挂起中断。
这是正确的理解?
如果是,我该如何丢弃在中断禁止期间产生的那些中断。
我可以实现一些使用某些延迟的工作,寻找linux API或干净的方式来做到这一点。
在启用中断之前,我们可以设置 desc = irq_to_desc(client-> irq); desc-> istate & =〜IRQS_PENDING; 并启用中断线,它将清除所有挂起的中断,但代码表示我们不应该修改这些变量。
谢谢
上中断,我不认为忽略它是有史以来做合理的事情。您禁用线路,从设备读取事件并再次启用该线路。如果在线路禁用时中断到达,您可能已经看到触发该线路的事件,但很可能没有。所以你不应该忽略它。你必须再次检查是否有未处理的事件。 – 2014-10-09 10:04:20
如果我们检查__enable_irq函数,它会调用check_irq_resend(desc,irq);这将重新发送任何挂起的中断。 – shunty 2014-10-09 10:22:47
嗯,是的,因为如果IRQ在禁用时发生,它仍然需要处理。如果不是,你可能会错过导致它的事件。 – 2014-10-09 11:13:14