1. MAP 文件
MDK编译过程文件(output文件夹中)
类型 | 介绍 |
---|---|
.o | 可重定向对象文件,每个.c/.s文件都对应一个.o文件 |
.axf | 可执行对象文件,由.o文件链接生成,仿真的时候需要用到此文件 |
.hex | INTEL Hex格式文件,用于下载到MCU运行,由.axf转换而来 |
.map | 连接器生成的列表文件,对分析程序存储占用情况非常有用 |
其他 | .crf、.d、.dep、.lnp、.lst、.htm、.build_log.htm等一般用不到 |
MAP文件概念和作用
- MAP文件是MDK编译代码后,产生的集程序、数据及IO空间的一种映射列表文件,包括了:各种.c文件、函数、符号等的地址、大小、引用关系等信息
- 用于分析各.c文件占用FLASH 和 RAM的大小,方便优化代码
2. STM32启动过程
2.1 STM32启动模式(F1)
M3/M4/M7等内核复位后,做的第一件事:
- 从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值,该值就是栈顶地址
- 从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值是复位向量
在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存
2.2 STM32启动过程
内部FLASH启动为例:
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:弱定义
如果定义SystemInit但外部没有SystemInit函数,则会报错!!
启动文件介绍:
- 初始化MSP,从0X0800 0000获取
- 初始化PC,从0X0800 0004获取
- 设置堆栈大小,Heap_Size(堆)、Stack_Size(栈)
- 初始化中断向量表
- 调用初始化函数(可选)
- 调用__main,标准C库函数,执行一系列设置,最终调用main函数
堆栈简介
函数局部变量较多,嵌套关系复杂时,需加大栈大小(Stack_Size)!
STM32启动过程图解
评论区