夜深人静学32系列5——STM32MAP文件浅析&启动过程

STM32MAP文件浅析&启动过程

  • MAP文件浅析
    • 1.MDK中间文件
    • 2.MAP文件浅析
      • 实际的MAP文件:
      • 你找不到你的MAP文件???
  • STM32启动过程
    • 启动过程
    • 启动文件介绍

上期我们学习了STM32的寄存器映射相关内容,本期我们一起来学习STM32MAP文件和启动过程的相关内容

MAP文件浅析

1.MDK中间文件

在MDK编译生成工程文件之后会产生大量的文件,其中有一些文件包含了项目工程的各种信息,称之为中间文件,常见的中间文件有以下:

文件类型 简介
.o 可重定向对象文件,每个.c/.s文件都会对应一个.o文件
.axf 可执行对象文件,由.o文件连接生成,仿真是会用到此文件(通过仿真器将其下载到MCU进行仿真调试)
.hex .hex文件:它是由.axf转换而来的一个可执行对象文件(使用ISP软件进行程序下载的)
.map 连接器生成的列表文件,包含程序的函数调用关系、FLASH和RAM 占用情况及其详细的汇总信息
其他 .crf、.d、.dep、.lnp、.lst、.htm、.build_log.htm等一般用不到

注意:

  • 可重定向是指该文件包涵数据、代码,但是没有指定地址,他的地址可以由后续链接的时候进行指定,不可重定向是指这种文件所包含的数据/代码都已经指定地址了,不能再改变
  • hex文件和.bin文件的区别是:.bin文件不含地址信息,全部是可执行代码;而hex文件则是包含地址信息的可执行代码。同样的.bin文件也是由.axf文件转换而来的

2.MAP文件浅析

MAP文件是MDK编译代码后,产生的集程序、数据及IO空间的一种映射列表文件,它包含了:各种.c文件、函数、符号等的地址、大小、引用关系等信息,有助于我们分析.c文件的Flash和RAM占用大小,调试代码,优化程序。

如下为MAP文件的组成:

组成部分 简介
程序段交叉引用关系 描述个文件之间函数的调用关系
删除映像未使用的程序段 描述工程中未被用到而被删除的程序端(代码/函数)
映像符号表 描述各符号(程序段/变量/数据)在存储器中的地址,类型,大小
映像内存分布图 描述各个程序段(函数)在存储器中的地址及占用大小
映像组件大小 给出整个映像代码(.o)占用空间汇总信息

实际的MAP文件:

  • 程序段交叉引用关系

夜深人静学32系列5——STM32MAP文件浅析&启动过程_第1张图片

  • 删除映像未使用的程序段

夜深人静学32系列5——STM32MAP文件浅析&启动过程_第2张图片
在这里插入图片描述

  • 映像符号表
    夜深人静学32系列5——STM32MAP文件浅析&启动过程_第3张图片
  • 映像内存分布图(我也看不太懂了)

夜深人静学32系列5——STM32MAP文件浅析&启动过程_第4张图片
夜深人静学32系列5——STM32MAP文件浅析&启动过程_第5张图片

  • 映像组件大小(整个代码的空间汇总信息)
    夜深人静学32系列5——STM32MAP文件浅析&启动过程_第6张图片

你找不到你的MAP文件???

这个是MAP文件的具体地址…………

夜深人静学32系列5——STM32MAP文件浅析&启动过程_第7张图片
如果还是找不到你的MAP文件的话,那你就应该检查一下是否勾选了生成map文件。
夜深人静学32系列5——STM32MAP文件浅析&启动过程_第8张图片

STM32启动过程

启动过程

1,内核复位后,从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值,该值就是栈顶地址MSP=_initial_sp,
2,从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值是复位向量PC 指针=Reset_Handler

注意:

芯片厂商可以会把0x0000 0000和0x0000 0004地址映射到其它的地址!!!

不同在启动方式中,内核获取堆栈指针 MSP 的初始值和程序计数器指针 PC 的初始值的地址不同,在之前的 “夜深人静学32系列2——STM32设计原理&最小系统” 中我们介绍了BOOT启动电路,根据BOOT0引脚的电平状态决定启动方式。,具体的对应关系如下:

夜深人静学32系列5——STM32MAP文件浅析&启动过程_第9张图片

3,通过PC指针进入Reset_Handler函数后,初始化中断向量表,初始化系统时钟(SystemInit),初始化堆栈,调用__main函数,进入mian函数。

夜深人静学32系列5——STM32MAP文件浅析&启动过程_第10张图片

启动文件介绍

单片机启动后第一个执行的文件就是启动文件,启动文件主要负责以下内容:

夜深人静学32系列5——STM32MAP文件浅析&启动过程_第11张图片
这里介绍以下栈和堆的区别:

  • 栈区:编译器自动分配和释放,存放函数参数、局部变量等
  • 堆区:程序员分配和释放,如malloc、calloc、realloc等

当函数局部变量较多,嵌套关系复杂时,需加大栈大小(Stack_Size)!

夜深人静学32系列5——STM32MAP文件浅析&启动过程_第12张图片
夜深人静学32系列5——STM32MAP文件浅析&启动过程_第13张图片

你可能感兴趣的:(夜深人静学32系列,stm32,单片机,嵌入式硬件,学习,c语言)