打印

STM32响应中断或异常时的一个疑问

[复制链接]
1653|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
442490720|  楼主 | 2012-3-13 00:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
中断或异常时第一个行动
"就是自动保存现场的必要部分:依次把xPSR, PC, LR, R12以及R3‐R0由硬件自动压入适当的堆栈中"
请问为什么只将这几个寄存器入栈,而R4-R11不管,那么在中断响应时,R4-R11的值可能被中断服务函数刷新,而中断返回些这些寄存器原先的值 得不到恢复,岂不会出现错误了???
沙发
airwill| | 2012-3-13 09:20 | 只看该作者
呵呵, 这只是说, CPU 会自动保存12个寄存器到堆栈中, 其他的寄存器, 则由用户来负责.
如果楼主用 汇编, 那么, 这些修改的寄存器, 要记得先做堆栈保存.
如果是 C 编程, 那么编译器会帮你搞定这些繁琐的事情的, 你只要管你自己的事情好了.

使用特权

评论回复
板凳
xwj| | 2012-3-13 10:05 | 只看该作者
呵呵,LS正解。用C的话编译器会自动做覆盖分析保存所有的动过的寄存器,用汇编旧的自己注意动过什么了。

CPU这样设计的原因一个是为了减少CPU的复杂度,不可能什么都保存;再个保存的越多需要的时间就越多(全并行也可以,但那得多少逻辑门才行?)

使用特权

评论回复
地板
442490720|  楼主 | 2012-3-16 21:29 | 只看该作者
学习了,多谢多谢

使用特权

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

本版积分规则

87

主题

178

帖子

1

粉丝