看了Cortex-M3技术参考手册后,感觉对异常处理中堆栈的操作理解还是不清晰.
1.在Thread mode下,发生异常或中断,处理器自动将xPSR,PC,LR,R12,R3,R2,R1,R0进行压栈,当ISR返回时,又自动将上述寄存器出栈.这个没问题.
2.当抢先优先级不同时,优先级高的中断可以对正在处理的低优先级中断处理程序进行占先.那占先的过程应该是怎样的?是立即终止低优先级中断代码执行,转到高优先级中断处理程序;还是手册中所指的Tail-chaining,等低优先级中断处理完成,不进行入栈出栈,紧接着调用高优先级中断处理程序?
3.如果中断嵌套是按照第2点中的前者,也就是高优先级中断立即打断低优先级中断的执行的话,那么用汇编编写中断处理程序时,是否需要自己对用到的寄存器进行入栈保护?因为处理器只是在第一次进入异常或中断时,才自动保存第1点中提到的8个寄存器.
4.如果中断嵌套是按照第2点中的后者,也就是低优先级处理完成才处理高优先级的中断,那么这样的抢先似乎名不符实,怎么保证快速的中断响应呢? |