啟動代碼文件名是STM32F10X.S,它的作用先總結下,然后再分析。啟動代碼作用一般是:1)堆和棧的初始化;2)向量表定義;3)地址重映射及中斷向量表的轉移;4)設置系統(tǒng)時鐘頻率;5)中斷寄存器的初始化;6)進入C應用程序。
(1)按啟動代碼的次序,先看堆和棧的初始化:
Stack_Size EQU 0x00000200 ;定義Stack_Size為0x00000200
AREA STACK, NOINIT, READWRITE, ALIGN=3 ;定義棧,可初始為0,8字節(jié)對齊 Stack_Mem SPACE Stack_Size ;分配0x200個連續(xù)字節(jié),并初始化為0 __initial_sp ;匯編代碼地址標號
Heap_Size EQU 0x00000000
AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit
PRESERVE8 ;指定當前文件堆棧8字節(jié)對齊 THUMB ;告訴匯編器下面是32為的Thumb指令,如果需要匯編器將插入位以保證對齊
(2)中斷向量表定義
AREA RESET, DATA, READONLY ;定義復位向量段,只讀 EXPORT __Vectors ;定義一個可以在其他文件中使用的全局標號。此處表示中斷地址
__Vectors DCD __initial_sp ; 給__initial_sp分配4字節(jié)32位的地址0x0 DCD Reset_Handler ; 給標號Reset Handler分配地址為0x00000004 DCD NMI_Handler ; 給標號NMI Handler分配地址0x00000008 DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; 這種形式就是保留地址,不給任何標號分配 |