最近看了沈文编著的AVR单片机C语言开发入门指导,对其中的寄存器分配部分不甚理解。 问题一:书中提到了SRAM的动态分配内存区域和软件堆栈可能存在着冲突的问题。我实际作了些小试验,发现,如果定义了很多局部变量,如果在工作寄存器中无法全部存放,就会存放在软件堆栈中,如硬件堆栈采用默认的16字节,则从0x10EE(0x10EF存放的是0xAA警戒线)开始向低地址存放,而所谓动态分配内存区好像一直没使用阿,也就不存在软件堆栈和动态分配区冲突的问题了,而只是和bss区冲突,实际上reset也只是在硬件堆栈和bbs区的尾部放了0xAA作为警戒线。这样我就不知道所谓的动态分配内存区域到底用来作什么? 问题二:flash中的idata由编译器(我们采用ICCAVR6.31A)完成,但是不知道为什么我们的程序中编译器分配这个区域时中间空出很大一片区域,而并不全是紧密排列,这样就导致其复制到SRAM的data区中后浪费了很大一块区域。 问题三:不知道func_lit这个区域放的函数入口地址作什么用的?
希望作者或者广大热心的网友能够指教。 |