配置栈
Stack_Size EQU 0x00000400
;定义栈空间大小0x00000400个字节,即1Kbyte
AREA STACK, NOINIT, READWRITE, ALIGN=3
;伪指令AREA,定义一个新的代码段或者数据段
;STACK:段名,可以是任何段名。但是以一个数字开始的名称必须包含在竖杠号内,否则会产生一个缺失段名错误,例如,|1_DataArea|。有些名称是习惯性的名称,例如,|.text|用于表示由C 代码产生的代码段,或用于以某种方式与C 库关联的代码段。
;NOINIT:表示数据段是未初始化的或初始化为零。其只包含零初始化的空间保留命令SPACE 或DCB、DCD、DCDU、DCQ、DCQU、DCW 或DCWU。可以决定在链接时AREA 是未初始化的还是零初始化的。此处还可以为CODE、DATA等。
; READWRITE:表示此段可以读写,这是数据区域的默认情况
; ALIGN=3: ELF (可执行连接文件)的代码段和数据段是按2的多少次方的字节来对齐的,可以是0~31。默认情况下,ELF 在4字节边界上对齐。这里表示以8字节对齐
Stack_Mem SPACE Stack_Size
;分配一块Stack_Size大小的内存空间作为栈
__initial_sp
;表示栈空间顶地址
配置堆
Heap_Size EQU 0x00000200
;定义堆空间大小0x00000200个字节,即512byte
AREA HEAP, NOINIT, READWRITE, ALIGN=3
;同上
__heap_base
;表示堆空间起始地址
Heap_Mem SPACE Heap_Size
;分配一块Heap_Size大小的内存空间作为堆
__heap_limit
;表示堆空间的结束地址
声明代码对齐方式和指令集
PRESERVE8
;指定了以下代码以8byte对齐
THUMB
;指定了以下代码为Thumb指令集
中断向量表
AREA RESET, DATA, READONLY
;同上
EXPORT __Vectors ;中断向量表入口地址
EXPORT __Vectors_End ;中断向量表结束地址
EXPORT __Vectors_Size