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

上期我们学习了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文件:

  • 程序段交叉引用关系

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

  • 映像符号表
    在这里插入图片描述
  • 映像内存分布图(我也看不太懂了)

在这里插入图片描述
在这里插入图片描述

  • 映像组件大小(整个代码的空间汇总信息)
    在这里插入图片描述

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

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

在这里插入图片描述
如果还是找不到你的MAP文件的话,那你就应该检查一下是否勾选了生成map文件。
在这里插入图片描述

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引脚的电平状态决定启动方式。,具体的对应关系如下:

在这里插入图片描述

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

在这里插入图片描述

启动文件介绍

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

在这里插入图片描述
这里介绍以下栈和堆的区别:

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

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


在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想写代码的我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值