我在中断处理程序中使用一个静态变量,使中断处理程序不可重入。
谢谢
PS。我在使用Linux。我使用的编程语言是C,如果它有区别的话。
发布于 2013-08-08 17:58:46
简单地说,中断服务例程本质上不需要重入。只有在嵌套中断情况下才需要可重入性。如果您使用的操作系统不支持嵌套中断,那么您根本不需要担心重入问题。如果是这样的话,您可以控制重新设置您正在服务的中断,这样您就不应该得到嵌套的中断。
编辑:既然我知道你在使用Linux,你可能会发现这个链接很有用:中断处理程序能被同一个中断处理程序抢占吗?
本质上,您的问题的答案是,Linux在断言中断时掩盖了一个中断,除非在注册ISR时传递了一个特定的标志,否则它不会抢先自己。
以下是一个相关的引语:
Linux中的中断处理程序不必是可重入的。当一个给定的中断处理程序正在执行时,相应的中断线将在所有处理器上屏蔽,从而防止接收到同一行上的另一个中断。通常所有其他中断都是启用的,因此其他中断都会被服务,但是当前的线路总是被禁用的。因此,从未同时调用相同的中断处理程序来服务嵌套中断。这大大简化了编写中断处理程序的工作。
发布于 2013-08-08 18:27:12
不能代表所有的中断处理程序,但是在十几个平台上,我编写了一个硬件中断服务例程(ISR),这种机制可以普遍防止重入者的行为。
另一方面,我所写的两个软件中断的ISRs,是故意用来检测和处理重入者活动的。
正如其他地方所提到的,这可能是依赖于OS/平台的。
https://stackoverflow.com/questions/18132580
复制相似问题