首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中断处理程序必须重入吗?

中断处理程序必须重入吗?
EN

Stack Overflow用户
提问于 2013-08-08 17:44:06
回答 2查看 6.8K关注 0票数 6

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

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

谢谢

PS。我在使用Linux。我使用的编程语言是C,如果它有区别的话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-08 17:58:46

简单地说,中断服务例程本质上不需要重入。只有在嵌套中断情况下才需要可重入性。如果您使用的操作系统不支持嵌套中断,那么您根本不需要担心重入问题。如果是这样的话,您可以控制重新设置您正在服务的中断,这样您就不应该得到嵌套的中断。

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

本质上,您的问题的答案是,Linux在断言中断时掩盖了一个中断,除非在注册ISR时传递了一个特定的标志,否则它不会抢先自己。

以下是一个相关的引语:

Linux中的中断处理程序不必是可重入的。当一个给定的中断处理程序正在执行时,相应的中断线将在所有处理器上屏蔽,从而防止接收到同一行上的另一个中断。通常所有其他中断都是启用的,因此其他中断都会被服务,但是当前的线路总是被禁用的。因此,从未同时调用相同的中断处理程序来服务嵌套中断。这大大简化了编写中断处理程序的工作。

票数 8
EN

Stack Overflow用户

发布于 2013-08-08 18:27:12

不能代表所有的中断处理程序,但是在十几个平台上,我编写了一个硬件中断服务例程(ISR),这种机制可以普遍防止重入者的行为。

另一方面,我所写的两个软件中断的ISRs,是故意用来检测和处理重入者活动的。

正如其他地方所提到的,这可能是依赖于OS/平台的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18132580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档