1.在linker连接过程中,参数--first用来指定代码段的起始地址,这个选项用来确定被放在可执行空间一初始地址的那个代码段,通常这个代码段包含中断向量表,参数--entry用来指定应用程序入口点,确定程序的入口地址。使用scr的默认配置文件时,初始代码段需要命名为RESET,默认将叫做RESET的段放在代码段的一开始,系统复位后从此地址开始执行,取第一个字作为MSP值,取第2个字作为PC的值,同时使用默认SCR配置文件时,需要特别指定出__Vectors和Reset_Handler,将__Vectors标出的作为向量表,将Reset_Handler标出的作为应用程序入口地址。
2.编译器在根据伪指令AREA HEAP, NOINIT, READWRITE, ALIGN=3中的READONLY/READWRITE的区别将其分配在代码段或者数据段,AREA header,CODE,READONLY中CODE/DATA编译器不对其作实际处理。编译器将属性设为READWRITE放在数据段,属性为READONLY的放在代码段。对于堆空间和栈空间AREA HEAP, NOINIT, READWRITE, ALIGN=3 AREA STACK, NOINIT, READWRITE, ALIGN=3 ,编译器将命名为HEAP的堆空间放在R/W数据段地址的下部,起始地址为R/W BASE,根据对空间大小自动确定结束地址。将命名为STACK的栈空间放在堆空间的上部,并根据HEAP的结束地址和栈空间的大小确定栈底的地址,Cortex-M3中栈空间向下生长,栈底的地址最大。被标记为READONLY的代码段被放在image镜像的CODE区有初始值,地址由R/O BASE确定,FLASH地址的初始值为0x8000000。被