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

2023-11-07

上期我们学习了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)!


在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 为什么这么多人自学黑客,但没过多久就放弃了(掌握正确的网络安全学习路线很重要)

    网络安全是一个 不断发展和演变 的领域 以下是一个 网络安全学习路线规划 旨在帮助初学者快速入门和提高自己的技能 基础知识 网络安全的 基础知识 包括 网络结构 操作系统 编程语言 等方面的知识 学习这些基础知识对理解网络安全的原理和技术至
  • 网络安全从入门到精通(超详细)学习路线

    首先看一下学网络安全有什么好处 1 可以学习计算机方面的知识 在正式学习网络安全之前是一定要学习计算机基础知识的 只要把网络安全认真的学透了 那么计算机基础知识是没有任何问题的 操作系统 网络架构 网站容器 数据库 前端后端等等 可以说不想
  • 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多

    前言 先来自我介绍 老家农村 家里好不容易把我送到大城市读书 大学非985 211 但在我们老家 能出一个本科大学生也是非常不容易的 因为农村信息的相对闭塞 我对大学专业一无所知 加上分数并非前茅 最后被调剂一个我并不喜欢的专业 这里就不透
  • Java 学习路线 2024 最新版!

    又对上次分享的 Java 学习路线进行了简单修改完善 并增加了免登录下载和黑夜模式 这里重发一下 花了一个月零碎的时间 我根据当下 Java 后端求职和招聘的最新要求 对之前写的 Java 后端学习路线进行了全面的优化和改进 添加图片注释
  • 深入浅出《Delta-Sigma Data Converters》(可下载)

    在数字信号处理领域 数据转换器是实现模拟与数字世界之间无缝转换的关键组件 而在这个子领域中 Delta Sigma Data Converter s 一书以其全面和深入的内容 为工程师 学者甚至爱好者们提供了一个极其宝贵的资源 今天将为大家
  • 太阳诱电树立超高端产品概念,与电子产业同步发展

    无论是传统的手机 家电 安防 汽车 医疗 交通 建筑的智能化转型 还是从物联网 工业4 0 智能硬件 互联网 一场基于大数据 互联网 应用软件等技术的硬件复兴热潮正在席卷全球 没有新东西出来 每家都一样 这一长期以来的争议一直困扰着CEAT
  • SRC漏洞挖掘经验+技巧篇

    一 漏洞挖掘的前期 信息收集 虽然是前期 但是却是我认为最重要的一部分 很多人挖洞的时候说不知道如何入手 其实挖洞就是信息收集 常规owasp top 10 逻辑漏洞 重要的可能就是思路猥琐一点 这些漏洞的测试方法本身不是特别复杂 一般混迹
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 利用CHAT写实验结论

    问CHAT 通过观察放置在玻璃表面上的单个水滴 人们可以观察到水滴充当成像系统 探究这样一个透镜的放大倍数和分辨率 CHAT回复 实验报告标题 利用玻璃表面的单一水滴观察成像系统的放大倍数和分辨率 一 实验目的 通过对比和测量 研究和探索玻
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 【计算机毕业设计】OA公文发文管理系统_xtv98

    近年来 人们的生活方式以网络为主题不断进化 OA公文发文管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工作效率
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • 为什么这么多人自学黑客,但没过多久就放弃了(掌握正确的网络安全学习路线很重要)

    网络安全是一个 不断发展和演变 的领域 以下是一个 网络安全学习路线规划 旨在帮助初学者快速入门和提高自己的技能 基础知识 网络安全的 基础知识 包括 网络结构 操作系统 编程语言 等方面的知识 学习这些基础知识对理解网络安全的原理和技术至
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE
  • GCC 变量映射和 MISRA-C

    我主要知道两种使用 GCC 声明内存映射寄存器的方法 有许多变体 使用双字段 每个外设的数据结构等 要么使用初始化为正确地址的指针 例如volatile uint32 t pMyRegister uint32 t 0xDEADBEEFUL
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公

随机推荐

  • Spring Cloud架构的各个组件的原理分析

    点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网
  • vue之router钩子函数

    模块一 全局导航钩子函数 1 vue router beforeEach 全局前置守卫 beforeEach的钩子函数 它是一个全局的before 钩子函数 before each 意思是在 每次每一个路由改变的时候都得执行一遍 它的三个参
  • SQL之变量的使用和赋值

    MySQL的用户变量 变量 变量名 比如 var 申明变量 set 变量名 比如 set var 只是申明 不显示 select 变量名 比如 select var 只是申明 显示 select num 字段名 from 表名 where
  • python 人工智能库_基于python的机器学习库 - 全文

    毫无疑问 神经网络和机器学习在过去几年一直是高科技领域最热门的话题之一 这一点很容易看出 因为它们解决了很多真正有趣的用例 如语音识别 图像识别 甚至是乐曲谱写 PyBrain的概念是将一系列的数据处理的算法封装到被称之为Module的模块
  • STM32F407单片机读取USR-WIFI232-B2模块的MAC地址

    最近工程项目需要单片机读取USR WIFI232 B2 WIFI 模块的MAC地址 研究了一下 并成功获取了MAC地址 步骤如下 1 单片机上电 USR WIFI232 B2 WIFI 模块先延时12秒 等待模块准备好 2 单片机给USR
  • 面试小结-那些求职路上的经验分享与感受

    世界那么大 我想去看看 世界那么大 我也想去看看 这个月 小吕完成了一次工作上的跳槽 在这种全民跳槽的月份 小吕的心情显的稍有些浮躁 工作上也怠慢了很多 虽然这个月的工作量也不大 没有心思钻研技术 也不能好好静下心来学习 我不喜欢现在这状态
  • flask昌平区安防摄像头可视化

    flask昌平区安防摄像头可视化 此系统有详细的录屏 下面只是部分截图 需要看完整录屏联系博主 系统开发语言python 框架为flask 数据库mysql 分为爬虫和可视化分析
  • 获取当月天数

    获取当月天数 需要导入import java util Calendar String time 2023 2 14 Calendar calendar Calendar getInstance Date data new SimpleDa
  • osgEarth的Rex引擎原理分析(十)earth文件中都有哪些options

    目标 九 中问题9 通过在earth文件中搜索options 发现主要有这么几种
  • 添加和修改docker容器端口映射的方法

    一 添加docker容器端口映射 以tomcat容器为例 root localhost docker run name mytomcat d p 8888 8080 tomcat name 创建的tomcat镜像名称 d 后台运行 p 将主
  • CTF中phpinfo应注意什么

    CTF中 phpinfo应注意什么 1 allow url fopen和allow url include 这个配置选项可以知道在PHP文件包含中可以使用哪些伪协议 2 PHP版本 3 open basedir 这个配置选项可以知道PHP将
  • eclipse打开之后没有界面

    自己工作的电脑上的eclipse经常打开之后没有界面显示出来 但是后台有eclipse和java的进程在运行 这个时候要进入到当前eclipse选择的工作目录 也就是打不开eclipse界面的那个工作目录 中的 gt metadata pl
  • 深入理解原码、反码和补码及其在计算机中的应用【附代码】

    目录 引言 一 原码 Sign Magnitude 二 反码 One s Complement 三 补码 Two s Complement 四 代码实例 结论 参考资料 引言 在计算机科学中 原码 反码和补码是表示有符号整数的三种常见编码方
  • JSON解析器之Gson、FastJson、Jackson

    文章目录 1 Gson 谷歌 2 FastJson 阿里 3 JackSon JSON解析器 常见的解析器 Jsonlib Gson fastjson jackson 1 Gson 谷歌 最好使用最新jar包 百度搜索Gson然后去GitH
  • NFT相关的常见术语

    NFT 爱好者在谈论这个东西时候总是会有一堆让人眼花缭乱的术语 对非圈内人来说会感觉难以理解 这里整理了23个术语解释来帮助你理解 1 10k 项目 一个 10k 项目是一个由大约 10 000 个头像组成的 集邮 项目 这种类型的 NFT
  • 如何在GitHub上传大文件(≥100M)

    学习工作中 有时会遇到需要将一些资源上传到GitHub的仓库 repository 上去 比如一些训练完的模型 但GitHub对于直接上传的文件有大小限制 超过100M的文件需要使用Git LFS才能上传 以下是我根据各位大神和自己的实操经
  • switch 语句 -- 超详解

    目录 语法结构 在switch 语句中的break default 子句 编程好习惯 语法结构 switch 整型表达式 语句项 那么语句项是什么呢 是一些case语句 如下 case 整形常量表达式 语句 在switch 语句中的brea
  • 论文研读 —— 9. DensePose From WiFi

    文章目录 Authors Bibtex 0 ABSTRACT 1 INTRODUCTION 2 RELATED WORK 3 METHODS 3 1 Phase Sanitization 3 2 Modality Translation N
  • linux编译新内核放在哪,将新文件系统编译到Linux内核中

    我正在努力在Debian上构建一个新的文件系统作为原型 因为现有的文件系统不符合我的某些要求 它旨在成为评估我们所拥有的某些要求的原型 到目前为止的步骤 我正在尝试使用provided MakeFile进行项目 但这是我得到的错误 make
  • 夜深人静学32系列5——STM32MAP文件浅析&启动过程

    STM32MAP文件浅析 启动过程 MAP文件浅析 1 MDK中间文件 2 MAP文件浅析 实际的MAP文件 你找不到你的MAP文件 STM32启动过程 启动过程 启动文件介绍 上期我们学习了STM32的寄存器映射相关内容 本期我们一起来学