Jane 发表于 2018-7-4 10:49:35

cortex-M3的压栈问题

我们都知道cortex-m3中断时是硬件自动压栈的,这样可以减少中断响应和恢复时间。中断硬件压栈的寄存器为xPSR, PC, LR, R12, R0-R3,为什么其他寄存器不需要压栈呢?

yu0405jie 发表于 2018-7-4 11:20:55

Cotrex_m3权威指南中有这样一段话:

为啥袒护R0-R3以及R12呢,R4-R11就是下等公民?原来,在ARM上,有一套的C函数调用标准约定(《C/C++ Procedure Call Standard for the ARM Architecture》,AAPCS, Ref5)。个中原因就在它上面:它使得中断服务例程能用C语言编写,编译器优先使用入栈了的寄存器来保存中间结果。当然,如果程序过大也可能要用到R4-R11,此时编译器负责生成代码来push它们。
页: [1]
查看完整版本: cortex-M3的压栈问题