12446|11

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

对Cortex-M3的中断嵌套时堆栈处理的疑问,望指教 [复制链接]

看了Cortex-M3技术参考手册后,感觉对异常处理中堆栈的操作理解还是不清晰.

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

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

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

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

最新回复

                                 明白了,抢先用于低级中断处理过程中发生高级中断,Tail-Chaining是高级中断处理过程中发生低级中断时用到的一项技术.   详情 回复 发表于 2009-2-6 10:41
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

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

                                 这是2个独立的概念,不要把他们硬拉到一起。
此帖出自stm32/stm8论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

我的理解

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进行出栈。
此帖出自stm32/stm8论坛
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 

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

                                 LZ从哪里得到这个结论?
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 

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

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 

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

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 

请始终按合理的方向理解

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

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

回复

60

帖子

0

TA的资源

一粒金砂(初级)

8
 

那Tail-chaining怎么理解呢

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

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

回复

59

帖子

0

TA的资源

一粒金砂(初级)

9
 

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的概念与中断优先级的概念无关。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

10
 

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

等干完了再收拾现场,省得多一道手续。
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 

版主解释到很精辟噢

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 

多谢香主

                                 明白了,抢先用于低级中断处理过程中发生高级中断,Tail-Chaining是高级中断处理过程中发生低级中断时用到的一项技术.
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
报名最后一周!2025 英飞凌消费、计算与通讯创新大会-北京站
会议时间:3月18日(周二)09:30签到
参会奖励:电动螺丝刀套装、户外登山包、京东卡

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表