MAP文件浅析
MDK编译过程文件(11种)
- .o:可重定向对象文件,每个.c、.s文件编译后都生成一个.o文件
- .axf:可执行对象文件,由.o文件链接生成,仿真的时候需要用到此文件
- .hex:INTEL Hex格式文件,用于下载到MCU运行,由.axf转换而来
- .map:连接器生成的列表文件,对分析程序存储占用情况非常有用
MAP文件概念和作用
MAP文件是MDK编译代码后,产生的集程序、数据及IO空间的一种映射列表文件。
包括各种.c文件、函数、符号等的地址、大小、引用关系等信息
MAP文件组成
- 程序交叉引用关心:描述各文件之间函数调用关系
- 删除印象未使用的程序段:描述工程中未用到而被删除的冗余程序段(函数/数据)
- 映像符号表:描述各符号(程序段/数据)在存储器中的地址、类型、大小等
- 映像内存分布图:描述各个程序段(函数)在存储器中的地址及占用大小
- 映像组件大小:给出整个映像代码(.o)占用空间汇总信息
STM32启动模式(自举模式)
M3/M4/M7等内核复位后,做的第一件事:
- 从地址0x0000 0000处取出堆栈指针MSP的初始值,该值就是栈顶地址
- 从地址0x0000 0004处取出程序计数器PC的初始值,该值是复位向量
芯片厂商可能会把这两个地址映射到其它的地址!!
STM32启动模式(F1)
在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。
STM32启动过程(内部FLASH启动为例)
启动文件介绍
- 初始化MSP:从0x0800 0000获取
- 初始化PC:从0x0800 0004获取
- 设置堆栈大小:Heap_Size(堆)、Stack_Size(栈)
- 初始化中断向量表:__Vectors
- 调用初始化函数:可选的,如调用:SystemInit函数
- 调用__main:标准C库函数,执行一系列设置,最终调用main函数
Reset_Handler函数介绍
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0,=SystemInit
BLX R0
LDR R0,=__main
BX R0
ENDP
- EXPORT:标明全局属性,可被外部调用
- IMPORT:申明来自外部文件,类extern
- PROC:定义子程序
- ENDP:表示子程序结束
- WEAK:弱定义
堆栈简介
- 栈(Stack):编译器自动分配和释放,存放函数参数、局部变量等
- 堆(Heap):程序员分配和释放,如malloc、calloc、realloc等
函数局部变量较多,嵌套关系复杂时,需加大栈大小(Stack_Size)!
堆向上生长,栈向下生长
STM32时钟系统
时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波。
时钟源、锁相环:HAL_RCC_OscConfig()
系统时钟、总线:HAL_RCC_ClockConfig()
使能外设时钟:__HAL_RCC_PPP_CLK_ENABLE()
扩展外设时钟(RTC/ADC/USB):HAL_RCCEx_PeriphCLKConfig()文章来源:https://www.toymoban.com/news/detail-829614.html
F407
文章来源地址https://www.toymoban.com/news/detail-829614.html
到了这里,关于STM32启动过程浅析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!