IAR+STM32固件库 启动文件startup_stm32f10x_hd.s功用及注释
扫描二维码
随时随地手机看文章
概况:
STM32库版本:V3.5.0
startup_stm32f10x_hd.s文件模块功能:
设置初始堆栈指针;
用ISR异常处理程序地址来设置向量表条目;
配置系统时钟,配置安装在STM3210E-EVAL板子上被用作数据内存外部sram;
设置初始PC程序计数器 指向__iar_program_start代码段地址。
在这个文件中的模块被包含在libs库中,可能被替换通过任何用户定义的模块--被PUBLIC定义的_program_start或者用户定义的一个开始标识;
为了覆盖在库中定义的cstartup,只需添加被修改版本到 工作台项目;
矢量表通常是位于地址0;
当在RAM中调试时,矢量表位于ram中,至少对齐2^6;
对于C-SPY来说,“__vector_table”有特殊的意义;
堆栈指针SP能够在__vector_table中找到,如果NVIC(嵌套中断向量控制器) vectortable register (VTOR)的地址不为0,则初始化到这块地址。
启动代码解析:为简单 明朗些,分成几部分展示:
关于IAR指令,参见《EWARM_AssemblerReference.ENU.pdf》文档。
.icf内存配置文件,与这个启动文件也是有大大的关系。
关于.icf 结构、功能分析,参见--stm32存储器结构、 IAR 开发环境下的.icf 文件、.map文件 解析
1、
;;格式:PROGRAMsymbol---其中symbol为分配模块的名字;;开始一个模块;PROGRAM和NAME指令的别名
MODULE?cstartup;汇编模块开始
;;Forwarddeclarationofsections.前置段声明
;;格式:SECTIONsection:type[flag][(align)]
;;NOROOT表示如果这个段里的标号(如CSTACK/.intvec等)没引用,则被linker舍弃;ROOT则是一定不舍弃。
;;(1)表示字节对齐数,为2的幂,(2)表示4字节对齐,(3)表示8字节对齐
;;定义各种模式STACK,具体大小、位置是由linker文件(IAR中.icf)决定的,这些STACK都定义在内部RAM中
SECTIONCSTACK:DATA:NOROOT(3);CSTACK数据段
;;通常INTVEC段被连接到flash闪存的开始地址,应该在.icf文件中有定义,如stmf10X系列闪存起始地址:0x08000000
SECTION.intvec:CODE:NOROOT(2);.intvec代码段
EXTERN__iar_program_start;;外部变量声明
EXTERNSystemInit;SystemInit声明,于外部定义
PUBLIC__vector_table;;外部可调用;向其他模块输出符号。
2、
DATA
;;中断向量表
__vector_table;;格式:DCDexpr[,expr]…;Generates32-bitconstants.生成32bit常数
DCDsfe(CSTACK);;格式:SFE(section[{+|-}offset])返回section段结束地址,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