异常状态
每一中异常总共有四种状态:
非激活态:异常没有被激活且没有被挂起。
挂起态: 异常等待处理器服务,一个外设的中断或者软件中断请求可以改变 相应中断的状态到挂起态,中断其实也是一种异常。
激活态: 处理器正在处理异常且还没有完成。
激活且挂起态:这种状态显然从字面意思理解就是激活态和挂起态的组合,即 处理器正在服务于异常时,有来自于同源的挂起异常
异常类型
Reset 复位:异常模式将复位看做是一种特殊类型的异常。
NMI 非屏蔽中断: 非屏蔽中断是除复位以外最高优先级的异常,NMI永久使能,且优先级为-2,NMI不能被其他异常从激活态屏蔽或阻止,也不能被其他异常抢占,除过复位。
HardFault: 硬件故障异常的发生,是因为异常处理错误,或者因为一种异常不能被其他异常机制管理,有固定的优先级-1,
MemMange:内存管理故障异常,是与内存保护相关的故障,
BusFault:总线故障异常是指令和数据内存处理时相关的故障,可能来自于内存系统中,检测到总线故障。
UsageFault: UsageFault异常是指令执行相关的故障,包括未定义的指令,非法未对齐的存取访问,指令执行的无效状态,异常返回错误,除数为0.
SVCall: SVCall 是被SVC 指令触发的一种异常,在操作系统环境下,应用程序可以使用SVC指令进入操作系统内核功能和设备驱动。
PendSV: PendSV是中断驱动的系统级服务请求,
SysTick: SysTick异常是系统定时器递减到0时候产生的,软件也可以产生SysTick异常,在操作系统环境下,处理器可以使用SysTick作为系统的滴答时钟。
Interrupt(ISR):这个大家应该都很熟悉,就是我们经常用的外设的中断,也可以是软件请求的中断,在系统中,外设使用中断和内核通信交流。各种异常的属性总结如下表:
异常处理
异常处理有三种:
Interrupt Service Routines(ISR)中断服务程序:主要处理中断
Fault Handlers:主要处理HardFault, MemManage Fault,UsageFault,BusFault,
System Handlers: 主要处理NMI,PendSV,SVCall,SysTick等