中断处理程序是否必须是可重入的?

Ara*_*uhi 6 c interrupt reentrancy interrupt-handling

我在中断处理程序中使用静态变量,使中断处理程序不可重入.

  1. 拥有一个不可重入的中断处理程序是否可以?
  2. 当引发硬件中断时,事件是否进入某种队列并等待当前中断处理程序调用完成或是否立即调用中断处理程序?

谢谢

PS.我正在使用Linux.我正在使用的编程语言是C,如果它有所作为.

sea*_*nmk 8

简短的回答是,中断服务程序本身并不需要是可重入的.只有在嵌套中断的情况下才需要重入.如果您使用的操作系统不支持嵌套中断,那么您根本不必担心重入.如果是这样,您可以控制重置正在服务的中断,以便永远不会得到嵌套中断.

编辑:现在我知道你正在使用Linux,你可能会发现这个链接很有用:中断处理程序是否可以被同一个中断处理程序抢占?

基本上你的问题的答案是Linux在断言时屏蔽中断,这样除非在注册ISR时传递特定标志,否则它不会抢占自身.

这是一个相关的引用:

Linux中的中断处理程序不需要是可重入的.当给定的中断处理程序正在执行时,相应的中断线在所有处理器上被屏蔽掉,从而防止接收到同一线路上的另一个中断.通常所有其他中断都被使能,因此其他中断被服务,但是当前线路始终被禁用.因此,永远不会同时调用相同的中断处理程序来为嵌套中断提供服务.这大大简化了编写中断处理程序的过程.

  • 从版本2.6.35开始,IRQF_DISABLED(旧的SA_INTERRUPT)标志已从Linux内核中删除。现在,任何ISR都将在该CPU禁用所有中断的情况下运行。 (3认同)