Kar*_*ška 4 arm exception-handling cpu-architecture cortex-m
ARM Cortex-M内核文档说,在执行异常条目堆栈框架时.这导致寄存器R0,R1,R2,R3,R12,LR,PC,xPSR被推到当前堆栈上.我的问题是为什么这种方式只推动那些寄存器而不是所有的上下文?例如,如果某些数据位于R5寄存器中,则异常处理程序使用该寄存器时将覆盖该数据.
异常处理程序本身的编译函数会推送一些寄存器(以及所有其他常规函数,因为异常处理函数没有区别),但经过大量调试后我发现事实并非总是如此,因为不同的变体寄存器被推送然后恢复.
为什么这种方式只推送那些寄存器而不是所有的上下文?
改善中断响应时间.堆栈操作越少意味着处理程序可以更快地启动.
例如,如果某些数据位于R5寄存器中,则异常处理程序使用该寄存器时将覆盖该数据.
然后处理程序负责保存R5.
异常处理程序本身的编译函数会推送一些寄存器(以及其他所有常规函数,因为异常处理函数没有区别)
那是故意的.被调用的函数必须保留与中断处理程序(R4-R11和SP)相同的寄存器集.因此,如果普通函数想要使用R5,它必须将其保存在某处并稍后恢复(有关详细信息,请参阅ARM®体系结构的过程调用标准).这样,编译器可以像处理普通函数一样处理中断函数.
情况并非总是如此,因为寄存器的不同变化被推送然后被恢复.
如果编译的函数覆盖R4-R11范围内的寄存器而不保存和恢复它,或者没有正确恢复PC或SP,则编译器会中断,周期.
归档时间: |
|
查看次数: |
576 次 |
最近记录: |