1. 堆栈设置:通过点灯程序的执行,根据romInit.s模板和单板硬件设计逐步完成各寄存器的配置。执行到这里,应该是为进入到C程序作准备了。首先要初始化堆栈指针,即将C程序入口地址赋给堆栈指针进行保存,所谓入口地址是指从ROM拷贝引导映像的入口地址。这段初始化代码将在编译过程中进行编译,以便在进入C程序后由romStart()函数调用该参数,为从ROM中搬移BIOS到RAM中作准备。在PowerPC类CPU中,将R1默认为堆栈寄存器SP,而STACK_ADRS宏定义配置了堆栈开始的地址,该宏定义包含在configAll.h文件中。堆栈开始地址的宏定义根据映像类型和处理器堆栈增长方向的不同而不同,具体如下:
1) ROM驻留型映像堆栈开始地址:
l 堆栈向下增长的处理器,其堆栈开始地址定义为:
#define STACK_ADRS STACK_RESIDENT
l 堆栈向上增长的处理器,其堆栈开始地址定义为:
#define STACK_ADRS (STACK_RESIDENT-STACK_SAVE)
2) 非ROM驻留型映像堆栈开始地址:
l 堆栈向下增长的处理器,其堆栈开始地址定义为:
#define STACK_ADRS _romInit
l 堆栈向上增长的处理器,其堆栈开始地址定义为:
#define STACK_ADRS (_romInit-STACK_SAVE)