异常是指任何打断处理器正常执行,并且迫使处理器进入一个由有特权的特殊指令执
行的事件。
内部事件(像处理器指令运行产生的事件)引起的异常称为同步异常。
异步异常主要是指由于外部异常源产生的异常,是一个由外部硬件装置产生的事件引
起的异步异常。
同步异常和异步异常的区别:同步异常触发后,系统必须立刻进行处理而不能够依然执行原有的程序指令步骤;而异步异常则可以延缓处理甚至是忽
略,例如按键中断异常,虽然中断异常触发了,但是系统可以忽略它继续运行。
FreeRTOS
的中断管理支持:
- 开/关中断。
- 恢复中断。
- 中断使能。
- 中断屏蔽。
- 可选择系统管理的中断优先级。
与中断相关的硬件:
- 外设:当外设需要请求 CPU 时,产生一个中断信号,该信号连接至中断控制器。
- 中断控制器:中断控制器是 CPU 众多外设中的一个,它一方面接收其他外设中断信号 的输入,另一方面,它会发出中断信号给 CPU。可以通过对中断控制器编程实现对中断源的优先级、触发方式、打开和关闭源等设置操作。在 Cortex-M 系列控制器中常用的中断控制器是 NVIC(内嵌向量中断控制器 Nested Vectored Interrupt Controller)。
- CPU:CPU 会响应中断源的请求,中断当前正在执行的任务,转而执行中断处理程序。NVIC 最多支持 240个中断,每个中断最多 256 个优先级。
中断管理的运作机制:
当中断产生时,处理机将按如下的顺序执行:
1.
保存当前处理机状态信息
2.
载入异常或中断处理函数到
PC
寄存器
3.
把控制权转交给处理函数并开始执行
4.
当处理函数执行完成时,恢复处理器状态信息
5.
从异常或中断中返回到前一个程序执行点
中断延迟是指从硬件中断发生到开始执行中断处理程序第一条指令之间的这段时间。也就是:系统接收到中断信号到操作系统作出响应,并完成换到转入中断服务程序的时间。
也可以简单地理解为:(外部)硬件(设备)发生中断,到系统执行中断服务子程序
(
ISR
)的第一条指令的时间。
外界硬件发生了中断后,
CPU
到中断处理器读取中断向量,并且查找中断向量表,找到对应的中断服务子程序(
ISR
)的首地址,然后跳转到对应的
ISR
去做相应处理。这部分时间,我称之为:识别中断时间
中断延迟
=
识别中断时间
+ [
等待中断打开时间
] + [
关闭中断时间
]
在嵌入式系统中合理利用中断,能更好利用
CPU
的资源。
中断管理:
FreeRTOS 中的中断使用其实跟裸机差不多的,需要我们自己配置中断,
并且使能中断,编写中断服务函数,在中断服务函数中使用内核
IPC
通信机制,一般建议
使用信号量、消息或事件标志组等标志事件的发生,将事件发布给处理任务,等退出中断
后再由相关处理任务具体处理中断。
实验:
中断管理实验是在
FreeRTOS
中创建了两个任务分别获取信号量与消息队列,并且定义了两个按键
KEY1
与
KEY2
的触发方式为中断触发,其触发的中断服务函数则跟裸机一
样,在中断触发的时候通过消息队列将消息传递给任务,任务接收到消息就将信息通过串
口调试助手显示出来。
中断服务函数:
实验现象: