最近在学习Cortex-M3 处理器,看到一些资料上提到一些不太好理解的名词,像:“背对背中断”、“占线优先级”、“次优先级”等,相信有很多朋友应该在初次看到时也会有一些疑惑吧!下面是我个人对它们的理解,如果有不对的地方,还望大家指正
首先看看Cortex-M3 处理器是怎么处理中断的吧,它像其他的单片机一样,当出现异常(对于Cortex-M3 处理器来说,异常分为很多种,我们常用到的中断只是其中的一部分而已)的时候,先会将处理器状态保存到相应的堆栈中,并在中断服务程序结束时,从堆栈中将那些保存了的寄存器值恢复,在这里恢复的时候如果没有多余的状态保存和恢复指令的话就会用到咬尾中断了。
我个人的理解就是,当处理器当前正在处理一个中断的时候,来了一个优先级更高的中断请求,那么当前的中断处理就会被打断,而被挂起,这个就和uC/OS的任务调度差不多,对于中断的处理前面已经提过,就是中断发生时会先保存处理器相关寄存器的值,而后在ISR结束时恢复,那么在高优先级中断打断低优先级中断这个过程中,处理器对于寄存器入栈和出栈的操作只进行了一次,即处理器在挂起低优先级中断任务,并去响应高优先级中断的过程就没有对处理器相关寄存器入栈和出栈的操作——咬尾中断,这样相对于处理器来说对于中断的响应时间就会减少,特别是对于在发生中断嵌套的时候由低优先级任务切换到高优先级任务时的响应速度会有较大提升。