2019-12-21 12:07发布
xiaohewanwan 发表于 2017-5-8 17:33 左边的LR寄存器就是刚才说的特殊值了,异常发生时由cpu硬件自动写入的,对软件透明。 堆栈中的LR就是异常发 ...
擦鞋匠 发表于 2017-5-8 17:41 大神一语中的,佩服...
最多设置5个标签!
我以为LR(链接寄存器)保存的就是进入异常之前的PC地址(考虑到三级流水线,需要-8).这个不就是退出中断服务程序后的返回地址嘛???
可是书上(权威指南)说,我打"???"的那个地址是返回地址...小弟迷惑了...
是我哪里理解有问题???恳请大神指教...
这个权威指南说得很清楚了吧。异常后的LR保存的不是异常发生的地址,而是一个特殊的值了,比如图中的0xfffffff9。函数返回时cpu可以通过检测LR的值来判断是否要是异常退出以及退出到什么模式下。
这样的用法可以避免出现特殊的异常返回指令,可以让c语言来直接写中断处理程序。
左边的LR寄存器就是刚才说的特殊值了,异常发生时由cpu硬件自动写入的,对软件透明。
堆栈中的LR就是异常发生时原始的LR,因为要被覆盖了,所以要压入异常栈中保存起来,在异常返回时会恢复到原始的LR寄存器中。
大神一语中的,佩服...
不敢当。写权威指南的Joseph Yiu才是大神啊。他上个月还来过中国推广新的cortex-m处理器,可惜当时没有带上书,要不也要弄个签名版的 哈哈。
一周热门 更多>