IAR+STM32固件庫 啟動(dòng)文件startup_stm32f10x_hd.s功用及注釋
概況:
STM32庫版本:V3.5.0
startup_stm32f10x_hd.s文件模塊功能:
設(shè)置初始堆棧指針;
用ISR異常處理程序地址來設(shè)置向量表?xiàng)l目;
配置系統(tǒng)時(shí)鐘,配置安裝在STM3210E-EVAL板子上被用作數(shù)據(jù)內(nèi)存外部sram;
設(shè)置初始PC程序計(jì)數(shù)器 指向__iar_program_start代碼段地址。
在這個(gè)文件中的模塊被包含在libs庫中,可能被替換通過任何用戶定義的模塊--被PUBLIC定義的_program_start或者用戶定義的一個(gè)開始標(biāo)識(shí);
為了覆蓋在庫中定義的cstartup,只需添加被修改版本到 工作臺(tái)項(xiàng)目;
矢量表通常是位于地址0;
當(dāng)在RAM中調(diào)試時(shí),矢量表位于ram中,至少對(duì)齊2^6;
對(duì)于C-SPY來說,“__vector_table”有特殊的意義;
堆棧指針SP能夠在__vector_table中找到,如果NVIC(嵌套中斷向量控制器) vectortable register (VTOR)的地址不為0,則初始化到這塊地址。
啟動(dòng)代碼解析:為簡單 明朗些,分成幾部分展示:
關(guān)于IAR指令,參見《EWARM_AssemblerReference.ENU.pdf》文檔。
.icf內(nèi)存配置文件,與這個(gè)啟動(dòng)文件也是有大大的關(guān)系。
關(guān)于.icf 結(jié)構(gòu)、功能分析,參見--stm32存儲(chǔ)器結(jié)構(gòu)、 IAR 開發(fā)環(huán)境下的.icf 文件、.map文件 解析
1、
;;格式:PROGRAMsymbol---其中symbol為分配模塊的名字;;開始一個(gè)模塊;PROGRAM和NAME指令的別名
MODULE?cstartup;匯編模塊開始
;;Forwarddeclarationofsections.前置段聲明
;;格式:SECTIONsection:type[flag][(align)]
;;NOROOT表示如果這個(gè)段里的標(biāo)號(hào)(如CSTACK/.intvec等)沒引用,則被linker舍棄;ROOT則是一定不舍棄。
;;(1)表示字節(jié)對(duì)齊數(shù),為2的冪,(2)表示4字節(jié)對(duì)齊,(3)表示8字節(jié)對(duì)齊
;;定義各種模式STACK,具體大小、位置是由linker文件(IAR中.icf)決定的,這些STACK都定義在內(nèi)部RAM中
SECTIONCSTACK:DATA:NOROOT(3);CSTACK數(shù)據(jù)段
;;通常INTVEC段被連接到flash閃存的開始地址,應(yīng)該在.icf文件中有定義,如stmf10X系列閃存起始地址:0x08000000
SECTION.intvec:CODE:NOROOT(2);.intvec代碼段
EXTERN__iar_program_start;;外部變量聲明
EXTERNSystemInit;SystemInit聲明,于外部定義
PUBLIC__vector_table;;外部可調(diào)用;向其他模塊輸出符號(hào)。
2、
DATA
;;中斷向量表
__vector_table;;格式:DCDexpr[,expr]…;Generates32-bitconstants.生成32bit常數(shù)
DCDsfe(CSTACK);;格式:SFE(section[{+|-}offset])返回section段結(jié)束地址,SFB(section)返回section段開始地址;
DCDReset_Handler;ResetHandler
DCDNMI_Handler;NMIHandler
DCDHardFault_Handler;HardFaultHandler
DCDMemManage_Handler;MPUFaultHandler
DCDBusFault_Handler;BusFaultHandler
DCDUsageFault_Handler;UsageFaultHandler
DCD0;Reserved
DCD0;Reserved
DCD0;Reserved
DCD0;Reserved
DCDSVC_Handler;SVCallHandler
DCDDebugMon_Handler;DebugMonitorHandler
DCD0;Reserved
DCDPendSV_Handler;PendSVHandler
DCDSysTick_Handler;SysTickHandler
;ExternalInterrupts
DCDWWDG_IRQHandler;WindowWatchdog
DCDPVD_IRQHandler;PVDthroughEXTILinedetect
DCDTAMPER_IRQHandler;Tamper
DCDRTC_IRQHandler;RTC
DCDFLASH_IRQHandler;Flash
DCDRCC_IRQHandler;RCC
DCDEXTI0_IRQHandler;EXTILine0
DCDEXTI1_IRQHandler;EXTILine1
DCDEXTI2_IRQHandler;EXTILine2
DCDEXTI3_IRQHandler;EXTILine3
DCDEXTI4_IRQHandler;EXTILine4
DCDDMA1_Channel1_IRQHandler;DMA1Channel1
DCDDMA1_Channel2_IRQHandler;DMA1Channel2
DCDDMA1_Channel3_IRQHandler;DMA1Channel3
DCD DMA1_Cha