RStack和CStack一般不为0
IAR和GCC在堆栈处理上不同导致IAR会多用一些RAM. AVR的函数调用(call,rcall)后,会把返回地址入栈(SP),而PUSH指令可以把寄存器入栈(数据堆栈).下面看看IAR和GCC的不同操作. GCC的数据堆栈就是SP,而IAR的数据堆栈地址放在Y中(所以有RStack和CStack之分). 所以GCC用"PUSH R0"入栈,而IAR用"ST -Y,R0"入栈. 其实多用的RAM是用在堆栈上的(GCC一个堆栈;IAR两个堆栈). 所以,并不是GCC对RAM控制的好,之是堆栈使用上的区别而已. |
|