第0章、序章
MAP文件浅析
.o:可重定向对象文件,每个.c/.s文件都对应一个.o文件,由.c和.s生成
.axf:可执行对象文件,由.o文件链接生成,仿真的时候需要用到此文件
.hex:INTEL Hex格式文件,用于下载到MCU运行,由.axf转换而来
.map:连接器生成的列表文件,对分析程序存储占用情况非常有用
其他:.crf、.d、.dep、.lnp、.lst、.htm、.build_log.htm等一般用不到
MAP文件的概念和作用
MAP文件是MDK编译代码后,产生的集程序、数据及IO空间的一种映射列表文件,简单说就是包括了:各种.c文件、函数、符号等的地址、大小、引用关系等信息
MAP的文件组成:
STM32的启动模式
M3/M4/M7等内核复位后,做的第一件事:
1,从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值,该值就是栈顶地址
2,从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值是复位向量
在系统复位后,SYSCLK的第四个上升沿,BOOT引脚的值将被锁存
启动模式选择引脚 | 启动模式 | 0x00000000 映射地址 | 0x00000004 映射地址 | |
BOOT1 | BOOT0 | |||
x | 0 | 主闪存存储器 | 0x08000000 | 0x08000004 |
0 | 1 | 系统存储器 | 0x1FFFF000 | 0x1FFFF004 |
1 | 1 | 内置SRAM | 0x20000000 | 0x20000004 |
STM32启动过程:
1、初始化MSP-从0x0800 0000获取
2、初始化PC-从0x0800 0004获取
3、设置堆栈大小-Heap_Size(堆)、Stack_Size(栈)
4、初始化中断向量表-__Vectors定义-中断向量表
5、调用初始化函数-可选,如调用:SystemInit函数
6、调用__main-标准C库函数,执行一系列设置,最终调用main函数
Reset_Handler函数:调用该函数才能最终到用户的main函数中。
堆栈简介:
图解STM32的启动过程:
MSP指针会自动+1。