ISR中断服务例程和传统代码之间有什么区别?

时间:2013-04-30 14:47:54

标签: operating-system

我试图找到一个正确的答案,但找不到任何答案,我需要知道在任何系统中实施一组ISR时必须考虑的问题。

提前致谢!!

1 个答案:

答案 0 :(得分:0)

中断服务程序(duh!)服务于“中断”。 “中断”几乎就是 - “正常”代码的执行被中断(出于多种原因)并且控制被传递给与之前执行的代码没有真正关系/知识的服务例程。 (即使该代码以某种方式导致中断)。

请记住,中断可能发生在许多“级别” - 非常低级别的ISR可能会处理未实现的指令(例如,FPU中不支持该功能的“sqrt”指令)并模拟该功能。它们可能处理设备I / O(与执行代码完全无关),页面错误,程序错误等。

通常(它随处理器,操作系统和中断类型而变化)输入ISR只保留了最小的“处理器状态”,因此ISR必须首先保存足够的状态(额外的GPR,状态寄存器等) )直到它有足够的自由来执行其功能。通常,保存将进入预先分配的“中断保存区域”,除非中断是“高电平”,足以允许ISR可分页,在这种情况下,可以使用堆栈的顶部。

然后ISR必须执行其功能,小心将其自身限制为可用资源(例如,如果不处于可分页状态,则仅使用“固定”存储)。

最后,ISR必须恢复中断的环境并返回,或者,如果要将中断转换为异常,则创建相应的异常信令环境并发出异常信号。