嵌入式计算机系统中,常常需要处理各种各样的事件,在硬件方面,这些事件可以看作是一个个电信号,通过各种外设与CPU进行交互。
为了及时响应这些事件,提高系统反应速度,中断技术是不可或缺的一部分,因此合理的中断分类对于设计嵌入式系统具有重要意义。以下是四种常见的中断细分类别:内部中断、外部中断、异常和软中断。
A.内部中断
内部中断(Internal Interrupt)是指由正在执行的程序内部的事件触发的中断。内中断也称异常、例外。这些事件可能是某个条件的满足或错误的发生,需要程序采取相应的处理措施,通常与当前执行的指令有关,中断信号来源于CPU的内部。例如,除零错误、越界访问等都可以引发内部中断。
内部中断是由程序自身根据特定条件触发的,程序可以主动发起内部中断请求,并提供相应的处理逻辑。内部中断通常是作为程序流程控制的一部分,用于处理特定的事件或满足特定的条件。
B.外部中断
在嵌入式系统中,当一个输入事件发生时(比如按下按键或收到一个传感器的数据),处理单元(CPU)需要立即响应并进行相应的操作。此时,可以通过“外部中断”来实现。
外部中断,简单来说,就是CPU通过在不同的电路引脚上检测电平变化来检测和响应外部事件。当检测到一个电平信号发生变化时,会触发一个中断请求, CPU暂停当前正在执行的指令,并跳转到预定义的外部中断服务程序中,以响应这一事件。
外部中断的场景
外部中断广泛应用于许多嵌入式系统,尤其是需要高效处理各种输入事件的场景。以下是一些使用外部中断的典型应用场景。
1. 按键检测
对于经典的按键输入,“轮询”已经不能满足需求。因为当 CPU 轮询按键状态时,它必须等待很长时间,而按键通常还需要一段时间才能返回到正常状态。这导致了很慢的响应速度,且对处理器负载会过重。采用外部中断则可以解决这个问题,在CPU响应中断的时候,立即执行按键检测。
2. 定时器
定时器也是使用外部中断的常见场景。通过在计数器递增到一定阈值时触发中断请求,实现定时到达后响应中断。通常用于需要精准时间控制的场合,如PWM调节、红外识别等。
那么什么是定时器中断呢?定时器中断是指由嵌入式系统硬件上的计数器周期性地产生的中断。这种中断不需要外部触发,而且定时器中断的时间间隔可以通过设置计数器的初始计数值和每次中断后重新加载的计数值来控制。
通常情况下,定时器中断用于周期性地执行某些任务或轮询某些状态。定时器中断的使用场景非常广泛。以下列出了一些常见的场景:
① 实时操作系统:
实时操作系统(RTOS)是专门为嵌入式系统设计的操作系统,能够管理嵌入式系统上多个任务的执行。在RTOS中,使用定时器中断来进行任务调度。每当定时器中断被触发时,RTOS会检查当前是否有更高优先级的任务就绪并立即进行上下文切换。
② 时序控制:
在一些需要时序控制的应用中,定时器中断经常被用来产生精确的间隔时间。这种应用可以通过将定时器中断与外部事件的触发信号捆绑在一起实现更为精确的时间控制。
C.异常
嵌入式系统中的异常(Exception)是由于程序执行过程中出现了某种非正常情况而引发的中断。异常通常是由硬件或操作系统检测到的,如内存访问异常、非法指令异常等。
异常的处理程序由操作系统负责执行。它是由硬件或操作系统检测到的非正常情况触发的,通常是因为程序执行中发生了错误或不合法的操作,由系统自动检测和触发,并由操作系统或异常处理机制进行相应的处理。
D.软中断
随着嵌入式系统的快速发展,软中断已成为嵌入式领域的一个非常重要的概念。软中断是指由软件生成的一种事件,可以用来通知CPU执行一段代码(即中断程序)。当软中断发生时,CPU会立即暂停正在执行的任务,转而执行中断程序,并在完成中断处理后恢复到之前的任务状态。
是否需要开启一个特定的软中断取决于应用程序需要做什么,例如读取外部传感器、发送数据等。通过使用软中断,应用程序可以允许多个任务同时运行,从而实现更高效的嵌入式设计。
软中断的分类
软中断通常分为两类:周期性和非周期性
1、周期性
周期性中断是指计算机系统中定期产生的中断信号,它通常是由硬件时钟设备触发。操作系统可以利用这个中断信号来处理一些定期或周期性的任务,例如更新系统时间、执行延迟的任务或者进行系统性能数据的采集等。
在一个基于时钟周期的操作系统中,周期性中断是非常重要的机制。通过周期性中断,CPU可以周期性地检查某些需要处理的事项,例如是否有新的I/O请求、用户进程是否需要被调度执行等。另外,为了避免让中断请求过于频繁,周期性中断还会设置一个定时器来控制中断的周期。
举例来说,在Windows操作系统中,周期性中断被称为“定时器中断”,在Linux操作系统中,它是由内核中的"tick"机制实现的,而在实时操作系统中,由于精度的要求更高,周期性中断的处理也有不同的机制。
总之,周期性中断对于操作系统来说是必不可少的机制,它能够帮助操作系统在后台高效地完成一些定期的任务,从而保证了系统的正常运行。
2、非周期性
非周期性中断是指,发生在处理器执行期间的、不同于周期性时钟驱动的、无法预测和计划的事件。这些事件会引起系统对正在执行的任务进行中断,并暂停它们的执行,以便处理特殊情况。非周期性中断通常由硬件设备或软件触发,包括输入/输出请求、内存错误、系统调用等。
非周期性中断对于操作系统的实现至关重要,因为它们允许系统在必要时响应外部事件和其他异常情况。操作系统必须能够及时识别和响应这些中断,并执行必要的处理程序以避免严重的故障。
在其本质上,非周期性中断是操作系统中的一种异步事件处理机制,因为这些事件的发生时间和数量是不确定的,操作系统必须随时准备好处理它们。过多的非周期性中断会影响整个系统的性能和可靠性,因此操作系统设计者必须努力{BANNED}最佳小化中断量并优化中断处理程序。