Cortex-M3 .s启动文件分析
arm 中常见的汇编指令和伪指令
下面是startup_.s文件的源代码, 该文件主要完成三项工作:堆栈以及堆的初始化、定位中断向量表、调用Reset Handler a) 堆栈以及堆的初始化工作
;/*
;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
;*/
; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Stack_Size EQU 0x00003000 ;0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3 ;指明8个字节对齐(ALIGN=3)
Stack_Mem SPACE Stack_Size
__initial_sp ;由于在arm中栈是满减堆栈,因此_initial_sp是栈顶的位置。
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00000000
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8 ;指明了以下的代码都是8字节对齐
THUMB ;指定了以下的代码为Thumb指令集
; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY ;声明了RESET数据段,只读
EXPORT __Vectors ;导出向量表标号
EXPORT __Vectors_End
EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SecureFault_Handler ; Secure Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler