中断服务历程
中断处理是计算机系统中的一种重要机制,用于处理异步事件或请求,如硬件中断、软件异常等。中断处理的基本原理是通过一个中断向量表来确定中断源,并执行相应的中断处理程序。在操作系统层面,这通常是通过中断服务例程(ISR)来实现的。
基本原理如下:
-
中断源:计算机系统中的各个硬件组件(如外设、时钟、网络适配器等)都可以产生中断信号。当某个硬件组件需要 CPU 处理时,它会发出一个中断请求。
-
中断控制器:中断信号通常由中断控制器收集和管理。中断控制器是一个硬件组件,负责协调各个中断源,并向 CPU 发送中断请求。
-
中断向量表:操作系统维护了一个中断向量表,其中包含了一系列中断向量(或中断号),每个中断向量对应一个中断处理程序的地址。
-
中断处理程序:每个中断向量都关联一个中断处理程序,也称为中断服务例程 (ISR)。中断处理程序是一段特定的代码,它处理特定类型的中断。当中断请求被接受后,CPU会根据中断向量找到对应的中 断处理程序,并执行它。
-
中断服务例程注册:操作系统或应用程序可以注册中断服务例程,告诉系统在特定类型的中断发生时应该执行哪个处理程序。
-
中断处理过程:当中断请求到达 CPU 时,CPU会检查中断向量,并执行与之相关联的中断处理程序。中断处理程序负责处理中断,可能会采取一些操作,然后恢复正常的执行。
-
中断完成:一旦中断处理程序执行完毕,系统会继续执行之前的任务。在处理硬件中断时,通常还需要向中断控制器发送中断完成信号,以允许中断控制器继续处理其他中断请求。
通过上述机制,系统可以根据中断向量表中的信息来确定应该执行哪个中断处理程序,而不需要在每个中断请求到来时手动指定执行的代码。这使得中断处理更加高效、可扩展和可维护。
为什么我们在isr.c中写一个函数,处理器就能自动找到与其对应的中断类型呢?
在 STM32 处理器中,中断服务函数 (Interrupt Service Routine, ISR) 是用来处理特定中断事件的函数。这些函数是用户定义的,用于响应不同类型的中断请求,如外部硬件中断、定时器中断等。当中断事件发生时,处理器会自动跳转到相应的中断服务函数来执行相应的操作。为了让处理器知道哪个中断与哪个函数相关联,需要进行以下配置:
-
中断向量表 (Interrupt Vector Table): 在嵌入式系统中,有一个中断向量表,它是一个存储着中断服务函数地址的表格。不同的中断号(或中断优先级)会映射到不同的表项。当一个中断事件发生时,处理器会查找中断号对应的中断向量表项,然后跳转到相应的中断服务函数地址开始执行。
-
中断优先级和中断控制器 (NVIC, Nested Vectored Interrupt Controller): STM32 处理器使用 NVIC 控制器来管理中断。在 NVIC 中,你可以配置中断的优先级,使得一些中断比其他中断更具优先级。这是为了确保在多个中断同时发生时,处理器能够正确响应最紧急的中断。中断服务函数的执行顺序是由中断优先级决定的。
-
中断服务函数的命名和关联: 为了关联一个中断服务函数和特定的中断号或优先级,需要按照一定的规则给中断服务函数命名。在 STM32 HAL 库中,这些规则通常是固定的,比如命名为
void EXTI0_IRQHandler(void)
的函数,其中EXTI0
表示外部中断线 0 的中断服务函数。处理器会根据这些规则找到正确的中断服务函数。
综合上述,当你在 isr.c
中编写一个中断服务函数,并按照正确的命名规则,同时在中断向量表中配置好对应的中断号和中断优先级,处理器就会自动关联中断服务函数和中断事件。当中断事件发生时,处理器会自动跳转到正确的中断服务函数执行相应的操作。这种机制使得处理中断变得更加方便和高效,同时也提高了代码的可维护性。
我们不能随意定义isr.c中的函数名称
在很多嵌入式系统和操作系统中,中断向量表是一个包含中断处理程序入口地址的数据结构。这些入口地址通常指向中断服务子程序(ISR)或中断处理函数,这些函数通常是按照特定的命名规则定义的。
当特定中断发生时,系统会查找中断向量表,找到对应的入口,然后跳转到该入口,以执行相应的中断处理程序。
因此,确保 ISR 函数的名称与中断向量表中的入口名称相匹配是关键的,这样系统知道应该执行哪个处理程序来处理特定的中断。如果 ISR 函数的名称不匹配,系统将无法正确地关联中断源和处理程序,从而导致中断处理错误或无法正常工作。
从c语言角度来理解这种模式,及中断向量表中定义了一个label,而函数名本身其实是一个地址,我们将这个label作为函数名就可完成只编写一个函数,系统自动处理的操作。
标签:服务,函数,中断向量,中断,处理程序,处理器 From: https://www.cnblogs.com/zk6696/p/17778621.html