当前位置: 首页 > news >正文

【嵌入式开发学习】__hex文件、bin文件、axf文件的区别

目录

前言

一、编译的过程

二、可烧录的文件

三、离线文件的烧录方法

(* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。 


前言

在STM32开发中,经常会碰到hex文件bin文件axf文件,这些都是可以烧写到板子里运行的文件。那么,你知道这三个文件有什么区别吗?

在回答这个问题之前,我们先来回顾一下C语言编译的过程。

一、编译的过程

在之前的C语言笔记《C程序的编译过程》中,有简单的分析了C程序编译的几个过程:

STM32也是用C语言来开发,也会经过类似的编译过程,只不过我们常常用MDK或者其它IDE来编译,其编译过程如下:

例如,我们的LED程序编译过程如下:

在IDE中进行编译时,我们只需点击编译按钮即可完成这些过程,编译过程用到的工具(.exe文件)在IDE的安装目录下的某个文件夹下,比如这里用的MDK的编译工具路径:

一般这些IDE或者工具集的一些编译工具都放在bin文件夹。再比如我们MinGW工具集(里面包含 gcc/g++编译器,可以编译在电脑上运行的程序)的编译工具所在路径为:

回归正题,我们的 MDK 编译时就是使用安装路径下的这些编译工具来完成我们的编译过程。

究其本质,我们在 cmd命令 窗口也是可以通过命令来编译我们的STM32程序的(前提是配好环境变量,否则得到编译工具所在的路径下进行编译)。

但我们不会这样干,因为IDE已经给我们提供了很大的便利。比如:

下面看一下我们在cmd窗口下运行 armcc命令 看会发生什么: 

我们看到了很多关于 armcc命令 的提示说明,有些常用的编译选项已经集成在MDK里供我们选择,比如:

二、可烧录的文件

axf文件、hex文件与bin文件都是可以运行在我们的stm32上的,它们都存储了编译器根据源代码生成的机器码,根据应用场合的不同,它们又有所区别:

  1. axf文件:包含调试信息。
  2. hex文件:包含地址信息。
  3. bin文件:最直接的代码映像。
  • axf文件是编译默认生成的文件,不仅包含代码数据,而且还包含着调试信息,在MDK里进行debug调试用的就是这个文件。

hex文件 在MDK里要勾选如下选项才可以生成:

  • hex文件 是一种使用十六进制符号表示的代码记录, 记录了代码应该存储到FLASH 的哪个地址,下载器可以根据这些信息辅助下载。
  • bin文件 是根据axf文件生成的,需要在MDK下添加类似如下格式命令来生成对应的bin文件:

bin文件就是最小的可以运行的文件了,其包含最直接的代码映像。这三个文件中axf文件最大,hex文件次之,bin文件最小,比如:

关于它们的区别这里只是简单的阐述说明,有时间、有精力、有兴趣的朋友可以去分析它们里面的内容。

三、离线文件的烧录方法

hex文件的烧录,我们可以使用 FlyMcu 工具通过 串口 来下载:.

FlyMcu 不可以烧 bin文件,因为上面说过了bin文件只包含最直接的代码映像,不包含地址信息,会出现如下错误: 

bin文件 可以使用 STM32CubeProgrammer软件 通过 STLINK 进行下载:


(* ̄︶ ̄)创作不易!期待你们的 点赞收藏评论喔。 

本文来源网络,免费分享知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除! 

相关文章:

  • Mybatis—XML配置文件、动态SQL
  • [idea]关于idea开发乱码的配置
  • 从零开始的目标检测和关键点检测(一):用labelme标注数据集
  • LeetCode----1979. 找出数组的最大公约数
  • 安装pytorch报错torch.cuda.is_available()=false的解决方法
  • input 调起键盘 ,键盘距离输入框底部太近
  • 我做云原生的那几年
  • Linux RPM包离线安装mysql数据库
  • 遥遥领先一个量级,平头哥发布首颗SSD主控芯片镇岳510
  • 人大金仓助力中国人民银行征信中心业务系统异地容灾优化升级
  • 数据库实验一
  • pod详解
  • Android Google登录并获取token(亲测有效)
  • 【Python】for循环方法中的range()方法参数介绍
  • c++装饰器模式
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • chrome扩展demo1-小时钟
  • Django 博客开发教程 8 - 博客文章详情页
  • JAVA SE 6 GC调优笔记
  • k8s 面向应用开发者的基础命令
  • Koa2 之文件上传下载
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python学习笔记 字符串拼接
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 反思总结然后整装待发
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 坑!为什么View.startAnimation不起作用?
  • 聊聊flink的TableFactory
  • 提醒我喝水chrome插件开发指南
  • 网络应用优化——时延与带宽
  • 正则表达式
  • 《码出高效》学习笔记与书中错误记录
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 选择阿里云数据库HBase版十大理由
  • ​MySQL主从复制一致性检测
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #include<初见C语言之指针(5)>
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (10)STL算法之搜索(二) 二分查找
  • (8)STL算法之替换
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (笔试题)合法字符串
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例