Cortex-M3进入中断(异常)时堆栈保存参数,其中有一个不能理解

2019-12-21 12:07发布

stm32f103zet6+MDK5.14
我想了解CM3在进入中断(或者说是异常)时到底需要保存哪些参数.额,其中有一个参数我不能理解,
如下图中"???"的那个,应该能看的清...还请大神帮忙指导下
000.png (57.06 KB, 下载次数: 0) 下载附件 2017-5-8 16:15 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
擦鞋匠
1楼-- · 2019-12-21 17:39
额,先说下小弟的理解吧
我以为LR(链接寄存器)保存的就是进入异常之前的PC地址(考虑到三级流水线,需要-8).这个不就是退出中断服务程序后的返回地址嘛???
可是书上(权威指南)说,我打"???"的那个地址是返回地址...小弟迷惑了...
是我哪里理解有问题???恳请大神指教...
xiaohewanwan
2楼-- · 2019-12-21 18:43
本帖最后由 xiaohewanwan 于 2017-5-8 17:26 编辑

这个权威指南说得很清楚了吧。异常后的LR保存的不是异常发生的地址,而是一个特殊的值了,比如图中的0xfffffff9。函数返回时cpu可以通过检测LR的值来判断是否要是异常退出以及退出到什么模式下。
这样的用法可以避免出现特殊的异常返回指令,可以让c语言来直接写中断处理程序。

擦鞋匠
3楼-- · 2019-12-21 22:52
 精彩回答 2  元偷偷看……
xiaohewanwan
4楼-- · 2019-12-21 23:57
本帖最后由 xiaohewanwan 于 2017-5-8 17:35 编辑

左边的LR寄存器就是刚才说的特殊值了,异常发生时由cpu硬件自动写入的,对软件透明。
堆栈中的LR就是异常发生时原始的LR,因为要被覆盖了,所以要压入异常栈中保存起来,在异常返回时会恢复到原始的LR寄存器中。
擦鞋匠
5楼-- · 2019-12-22 04:11
xiaohewanwan 发表于 2017-5-8 17:33
左边的LR寄存器就是刚才说的特殊值了,异常发生时由cpu硬件自动写入的,对软件透明。
堆栈中的LR就是异常发 ...

大神一语中的,佩服...
xiaohewanwan
6楼-- · 2019-12-22 05:49
擦鞋匠 发表于 2017-5-8 17:41
大神一语中的,佩服...

不敢当。写权威指南的Joseph Yiu才是大神啊。他上个月还来过中国推广新的cortex-m处理器,可惜当时没有带上书,要不也要弄个签名版的 哈哈。

一周热门 更多>