STM32启动文件详解——startup_stm32f10x_xx.s
扫描二维码
随时随地手机看文章
一、启动文件的作用
(关于启动代码的作用,前面已经提到过了,这里再啰嗦一下)
(1)初始化堆栈指针SP;
(2)初始化程序计数器指针PC;
(3)设置堆、栈的大小;
(4)设置异常向量表的入口地址;
(5)配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM);
(6)设置C库的分支入口__main(最终用来调用main函数);
(7)在3.5版的启动文件还调用了在system_stm32f10x.c文件中的SystemIni()函数配置系统时钟。
二、启动文件中提到的汇编指令
三、启动代码详解
1、stack——栈
Stack_SizeEQU0x00000400
AREASTACK,NOINIT,READWRITE,ALIGN=3
Stack_MemSPACEStack_Size
__initial_sp
分配名为STACK,不初始化,可读可写,8(2^3)字节对齐的1KB空间。
栈:局部变量,函数形参等。栈的大小不能超过内部SRAM大小。
AREA:汇编一个新的代码段或者数据段。STACK段名,任意命名;NOINIT表示不初始化;READWRITE可读可写;ALIGN=3(2^3= 8字节对齐)。
__initial_sp紧挨了SPACE放置,表示栈的结束地址,栈是从高往低生长,结束地址就是栈顶地址。
2、heap——堆
Heap_SizeEQU0x00000200
AREAHEAP,NOINIT,READWRITE,ALIGN=3
__heap_base
Heap_MemSPACEHeap_Size
__heap_limit
分配名为HEAP,不初始化,可读可写,8(2^3)字节对齐的512字节空间。__heap_base堆的起始地址,__heap_limit堆的结束地址。堆由低向生长。动态分配内存用到堆。
PRESERVE8 //指定当前文件的堆栈按照 8 字节对齐。
THUMB //表示后面指令兼容 THUMB 指令。THUBM 是ARM 以前的指令集,16bit,现在 Cortex-M 系列的都使用 THUMB-2 指令集,THUMB-2 是32 位的,兼容 16 位和 32 位的指令,是 THUMB 的超级。
3、向量表
AREARESET,DATA,READONLY
EXPORT__Vectors
EXPORT__Vectors_End
EXPORT__Vectors_Size
定义一个名为RESET,可读的数据段。并声明 __Vectors、__Vectors_End 和__Vectors_Size 这三个标号可被外部的文件使用。
__VectorsDCD__initial_sp;TopofStack
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
DCD RTC_IRQHandler ; RTC