我在中断处理程序中使用静态变量,使中断处理程序不可重入。
由于
PS。我正在使用Linux。我正在使用的编程语言是C,如果它有所作为。
答案 0 :(得分:8)
简短的回答是,中断服务例程本身并不需要是可重入的。只有在nested interrupts的情况下才需要重入。如果您使用的操作系统不支持nested interrupts,那么您根本不需要担心重入。如果是这样,您可以控制重置正在服务的中断,以便永远不会得到嵌套中断。
编辑:既然我知道您使用的是Linux,那么您可能会发现此链接很有用:Can an interrupt handler be preempted by the same interrupt handler?
基本上你的问题的答案是Linux在断言时屏蔽中断,这样除非在注册ISR时传递特定标志,否则它不会抢占自身。
这是一个相关的引用:
Linux中的中断处理程序不需要是可重入的。当给定 中断处理程序正在执行,相应的中断线是 在所有处理器上屏蔽掉,防止同一个中断 被收到的一行。通常所有其他中断都已启用, 所以其他中断服务,但当前行始终 禁用。因此,永远不会调用相同的中断处理程序 同时服务嵌套中断。这大大简化了 写你的中断处理程序。
答案 1 :(得分:0)
不能代表所有的中断处理程序,但是在十几个平台上我编写了一个硬件中断服务程序(ISR),其机制就是普遍阻止重入行为。
另一方面,软件的ISR中断了我写的2,故意用于检测和处理可重入活动。如其他地方所述,这可能取决于操作系统/平台。