ISR 与函数调用的区别2025年4月29日 | 阅读 6 分钟 在本文中,您将学习 ISR 与函数调用的区别,但在讨论区别之前,您需要简要了解 ISR 和函数调用。 什么是 ISR?中断服务程序 (ISR) 是硬件在响应中断时调用的软件例程。ISR 检查中断,确定如何处理它,执行它,并返回一个逻辑中断值。如果不需要进一步处理,ISR 会用返回值通知内核。ISR 必须执行得非常快,以免减慢设备的操作以及所有低优先级 ISR 的操作。 尽管 ISR 可能会将数据从 CPU 寄存器或硬件端口移动到内存缓冲区,但通常,它依赖于一个专用的中断线程(或任务),称为中断服务线程 (IST),来完成大部分必需的处理。如果需要额外的处理,ISR 会将逻辑中断值返回给内核。然后它将物理中断号映射到逻辑中断值。 中断处理机制以下是中断处理的机制,步骤如下: - 中断是一种条件,它使 CPU 暂停当前程序并执行 ISR。ISR 是一个专门编写的程序,用于处理导致中断的条件。
- 中断被处理后,CPU 会回到主程序,恰好是在它离开的下一条指令处。
- 在中断驱动的数据传输中,每当 I/O 设备准备好进行数据传输时,它就会中断 CPU。在 ISR 中,CPU 将执行数据传输。
- 这种方法比轮询好,因为 CPU 不必花费时间检查 I/O 设备的状态。键盘是中断驱动的 I/O 访问的一个很好的例子。
- 键盘应该在按下按键时中断 CPU,而不是由 CPU 进行检查。这样,当用户根本没有打字时,就不会浪费时间反复检查键盘。
- I/O 设备通过向 CPU 发送 $\overline{INTR}$ 信号来请求中断。
- 每当 CPU 收到 $\overline{INTR}$ 信号时,它会完成当前指令的执行,然后执行 ISR。当 CPU 准备好时,它会通过 INTA 线发送确认信号。
- ISR 执行完毕,CPU 返回主程序。
- I/O 设备在执行后关闭 $\overline{INTR}$ 信号。
 例如:在下面的示例中,通过中断驱动的 I/O 进行 I/O 传输。 - 如果一个 I/O 设备想要与处理器进行数据传输,它必须中断处理器。
- 中断是一种使处理器执行中断服务例程的条件。
- 在 ISR 中,处理器将与 I/O 设备进行数据传输。
在此示例中,按下键盘按键会请求中断, - 处理器不必检查按键是否按下,而是键盘在按下按键时会中断处理器。
- 在键盘的 ISR 中,它是键盘驱动程序软件的一部分,处理器将从键盘读取数据。
 ISR 的优点以下是 ISR 的优点,例如: - ISR 异步事件可以在程序执行的任何时候发生。
- ISR 将 PC、标志和寄存器保存在堆栈上,禁用所有中断,并加载 ISR 的地址。
- ISR 不能有可以传递给它的参数。
- ISR 不能返回值。
- ISR 启用中断。
- 通常,ISR 很小,因为它会占用其他进程的一些时间。
- 有些 ISR 有自己的堆栈。
什么是函数调用?函数调用也称为子程序调用。子程序是程序重复需要的指令集。它是大型程序的一部分,负责执行特定任务。大型程序可能执行繁重的工作负载,而子程序可能只执行一个简单的任务,并且与其余程序代码无关。 函数被编码成可以被多次调用,并从不同地方调用(甚至在其他函数内部调用)。当调用一个函数时,处理器可能会转到函数代码所在的位置并逐条执行函数指令。完成函数后,处理器将返回到它离开的准确位置,并从下一条指令继续执行。 函数是代码重用的绝佳工具。许多现代编程语言都支持函数。一组函数称为**库**。库通常用作共享和交易软件的手段。在某些情况下,整个程序可能是一系列子程序。 对于 8086 处理器,通过 CALL 指令调用子程序,并通过 RET 指令返回。它减小了程序的大小。 ISR 与函数调用的区别函数必须被显式调用,并且与调用它的函数在同一个上下文和执行线程中。硬件 ISR 不是显式调用的,而是由某个外部事件触发的。在切换到 ISR 之前,中断发生时,当前线程的上下文会自动保存。 作为回报,会发生反向上下文切换,恢复中断前的处理器状态,以便执行从中断点继续。以下是 ISR 与函数调用之间的一些更详细的区别: ISR | 函数调用 |
---|
中断通常由内部或外部信号微处理器触发,而不是由指令执行触发。ISR 在将程序的当前状态保存在堆栈后执行。 ISR 执行的任务取决于中断设备或程序员编写的指令。 | 函数调用通过执行指令来调用,这些指令执行特定任务并减小程序的大小。 | 硬件决定了 ISR 的地址。 ISR 地址写在中断向量表中,每个中断的 ISR 地址是固定的。 | 子程序的地址写在指令内部,指令写在主程序代码中。 | ISR 用于所有通用任务。 | 函数调用是为了特定于程序的任务而进行的。 | 当当前程序执行期间发生中断时,在执行完当前指令后,处理器会执行 ISR。ISR 执行完毕后,处理器必须恢复到中断发生前的状态。 为此,会保存 PC 内容、µP 寄存器和一些状态条件。微处理器中所有状态位条件的集合称为 PSW(程序状态字)。- 在中断周期中,PC 和 PSW 的内容被推送到堆栈上。然后将特定中断的分支地址传递给 PC,并将新的 PSW 加载到状态寄存器中。
- ISR 中的最后一条指令是“中断返回”指令。当执行此指令时,旧的 PSW 和返回地址将从堆栈中弹出。
| 这里,只将 PC 保存在堆栈上,以获取主程序中下一条指令的地址。 子程序必须能够访问调用子程序的函数数据,并将结果返回给该子程序。因此,会进行子程序参数和数据链接。 这可以通过以下方式完成:- AC 寄存器可用于单个输入参数和单个输出参数。在具有多个处理器寄存器的计算机中,可以通过这种方式传递更多参数。
- 传递数据给子程序的另一种方法是通过内存。
|
|