网上找了很多,也发现比较详细的,通过网上文章 注解每一行的详细含义
Stack_Size EQU 0x00000400 // EQU 常量定义,定义栈大小为0x400,即1KB(实际上ARM为32位,实际只能保存256个32bit 数据)
AREA STACK, NOINIT, READWRITE, ALIGN=3
// AREA 表示命令指示汇编程序汇编一个新的代码段或数据段。段是独立的、指定的、不可见的代码或数据块,它们由链接程序处理
// STACK 表示为栈空间
// NOINIT 表示 数据段是未初始化的或者初始化为0
// READWRITE 表示可读写
// ALIGN = 3, 表示2的3次方字节 即8字节对齐
Stack_Mem SPACE Stack_Size // 初始化栈空间
__initial_sp // 由于STM32 入栈的时候是从高到低,所以这里给出栈顶地址,如果入栈是从低到高,则需要在初始化堆栈前 设置标号,即栈指针指向栈底
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00000200 // EQU 常量定义,定义堆大小为0x200,即512B(实际上ARM为32位,实际只能保存128个32bit 数据)
AREA HEAP, NOINIT, READWRITE, ALIGN=3 // HEAP 表示为堆
__heap_base // 堆分配从低到高,此时给出堆底地址
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8 // 保持8字节对齐
THUMB
; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY
EXPORT __Vectors // 中断向量表开始
EXPORT __Vectors_End // 中断向量结束
EXPORT __Vectors_Size // 中断向量表大小
__Vectors DCD __initial_sp ; Top of Stack // 首先从这儿跳到 “__initial_sp ”,初始化栈大小
DCD Reset_Handler ; Reset Handler // 接着跳到“Reset_Handler ” 执行
DCD NMI_Handler ; NMI Handler // 通俗的讲定义NMI_Handle 中断函数名称,专业的讲就是指定该中断地址
DCD HardFault_Handler ; Hard Fault Handler // 通俗的讲定义HardFault_Handler中断函数名称,专业的讲就是指定该中断地址
DCD MemManage_Handler ; MPU Fault Handler // 通俗的讲定义MemManage_Handler中断函数名称,专业的讲就是指定该中断地址
DCD BusFault_Handler ; Bus Fault Handler // 通俗的讲定义 BusFault_Handler 中断函数名称,专业的讲就是指定该中断地址
DCD UsageFault_Handler ; Usage Fault Handler // 通俗的讲定义