对Cortex-M3的中断嵌套时堆栈处理的疑问,望指教

fishingnet001   2009-2-5 15:35 楼主
看了Cortex-M3技术参考手册后,感觉对异常处理中堆栈的操作理解还是不清晰.

1.在Thread mode下,发生异常或中断,处理器自动将xPSR,PC,LR,R12,R3,R2,R1,R0进行压栈,当ISR返回时,又自动将上述寄存器出栈.这个没问题.

2.当抢先优先级不同时,优先级高的中断可以对正在处理的低优先级中断处理程序进行占先.那占先的过程应该是怎样的?是立即终止低优先级中断代码执行,转到高优先级中断处理程序;还是手册中所指的Tail-chaining,等低优先级中断处理完成,不进行入栈出栈,紧接着调用高优先级中断处理程序?

3.如果中断嵌套是按照第2点中的前者,也就是高优先级中断立即打断低优先级中断的执行的话,那么用汇编编写中断处理程序时,是否需要自己对用到的寄存器进行入栈保护?因为处理器只是在第一次进入异常或中断时,才自动保存第1点中提到的8个寄存器.

4.如果中断嵌套是按照第2点中的后者,也就是低优先级处理完成才处理高优先级的中断,那么这样的抢先似乎名不符实,怎么保证快速的中断响应呢?

回复评论 (11)

请不要混淆中断的优先级处理和Tail-chaining

                                 这是2个独立的概念,不要把他们硬拉到一起。
点赞  2009-2-5 15:41

我的理解

3.如果中断嵌套是按照第2点中的前者,也就是高优先级中断立即打断低优先级中断的执行的话,那么用汇编编写中断处理程序时,是否需要自己对用到的寄存器进行入栈保护?因为处理器只是在第一次进入异常或中断时,才自动保存第1点中提到的8个寄存器.

发生低优先级中断后处理器自动将xPSR,PC,LR,R12,R3,R2,R1,R0进行压栈并开始执行低优先级中断程序。
发生抢占的时候,高优先级中断立即打断低优先级中断的执行,同时处理器自动将xPSR,PC,LR,R12,R3,R2,R1,R0进行压栈并执行高优先级中断程序。
等高优先级的中断执行完后,自动将xPSR,PC,LR,R12,R3,R2,R1,R0进行出栈,继续执行低优先级的中断。
等低优先级的中断执行完,自动将xPSR,PC,LR,R12,R3,R2,R1,R0进行出栈。
点赞  2009-2-5 16:44

谁说:处理器只是在第一次进入异常或中断时,才自动保存

                                 LZ从哪里得到这个结论?
点赞  2009-2-5 16:50

如果可重复保存,那就好理解多了

                                  
点赞  2009-2-5 17:34

我是看它写着不可重复开始,所以以为只是刚中断时自动保存

                                  
点赞  2009-2-5 17:35

请始终按合理的方向理解

如果总是向不合理的方向理解,只能是钻牛角尖了。

楼上红笔圈出的部分表示:一旦开始了“Push eight registers”的动作,则这个动作不能被重新开始。
点赞  2009-2-5 17:39

那Tail-chaining怎么理解呢

手册上5.6有一段这样写的
 
   The processor tail-chains if a pending interrupt has higher priority than all stacked exceptions.

如果挂起的中断比当前中断优先级高的话,那不是立即就发生切换了吗?Tail-chaining什么情况下发生呢?
点赞  2009-2-5 17:41

Tail-chaining是指一个中断退出至下一个中断进入这段时间的动

当CPU服务于某个中断(假设为A)时,如果有优先级低于当前中断的其它中断到达,它们(假设有B、C、D)将会被至于挂起状态;当前中断的处理结束后,所有处于挂起状态的中断中优先级最高的哪个(假设是C)将要被响应(8楼那段英文的后半段就是这个意思)。

按照以前没有Tail-chaining的处理,大致的处理过程可以如下描述:
1)压栈保存寄存器
2)进入中断A的服务程序
3)处理中断A
4) 退栈恢复寄存器
5)压栈保存寄存器
6)进入中断C的服务程序
7)处理中断C
8) 退栈恢复寄存器

引入Tail-chaining的概念,上述的步骤4)和步骤5被省略,节省了时间。

从这个过程可以看出Tail-chaining的概念与中断优先级的概念无关。
点赞  2009-2-5 18:35

Tail-chaining 咬尾,尾联,交尾。总之还没回过神来又干上了。

等干完了再收拾现场,省得多一道手续。
点赞  2009-2-5 20:04

版主解释到很精辟噢

                                  
点赞  2009-2-5 20:25

多谢香主

                                 明白了,抢先用于低级中断处理过程中发生高级中断,Tail-Chaining是高级中断处理过程中发生低级中断时用到的一项技术.
点赞  2009-2-6 10:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复