打印

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

[复制链接]
6871|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bandit1101|  楼主 | 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点中的后者,也就是低优先级处理完成才处理高优先级的中断,那么这样的抢先似乎名不符实,怎么保证快速的中断响应呢?
沙发
香水城| | 2009-2-5 15:41 | 只看该作者

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

这是2个独立的概念,不要把他们硬拉到一起。

使用特权

评论回复
板凳
violet520| | 2009-2-5 16:44 | 只看该作者

我的理解

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:50 | 只看该作者

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

LZ从哪里得到这个结论?

使用特权

评论回复
5
bandit1101|  楼主 | 2009-2-5 17:34 | 只看该作者

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

使用特权

评论回复
6
bandit1101|  楼主 | 2009-2-5 17:35 | 只看该作者

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

使用特权

评论回复
7
香水城| | 2009-2-5 17:39 | 只看该作者

请始终按合理的方向理解

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

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

使用特权

评论回复
8
bandit1101|  楼主 | 2009-2-5 17:41 | 只看该作者

那Tail-chaining怎么理解呢

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

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

使用特权

评论回复
9
香水城| | 2009-2-5 18:35 | 只看该作者

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的概念与中断优先级的概念无关。

使用特权

评论回复
10
HWM| | 2009-2-5 20:04 | 只看该作者

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

等干完了再收拾现场,省得多一道手续。

使用特权

评论回复
11
kingpoo| | 2009-2-5 20:25 | 只看该作者

版主解释到很精辟噢

使用特权

评论回复
12
bandit1101|  楼主 | 2009-2-6 10:41 | 只看该作者

多谢香主

明白了,抢先用于低级中断处理过程中发生高级中断,Tail-Chaining是高级中断处理过程中发生低级中断时用到的一项技术.

使用特权

评论回复
13
哲哲55| | 2012-1-30 11:30 | 只看该作者
好帖,解惑了。:)

使用特权

评论回复
14
HORSE7812| | 2016-2-26 16:10 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

13

帖子

0

粉丝