在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程序的(前提是配好环境变量,否则得到编译工具所在的路径下进行编译),但是我们不会这样干(有这功夫就可以去学学Linux),因为IDE已经给我们提供了很大的便利。比如:

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

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

可烧录的文件

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

axf文件:包含调试信息。hex文件:包含地址信息。bin文件:最直接的代码映像。

axf文件是编译默认生成的文件,不仅包含代码数据,而且还包含着调试信息,在MDK里进行debug调试用的就是这个文件。hex文件在MDK里要勾选如下选项才可以生成:

hex 文件是一种使用十六进制符号表示的代码记录, 记录了代码应该存储到FLASH 的哪个地址,下载器可以根据这些信息辅助下载。

bin文件是根据axf文件生成的,需要在MDK下添加类似如下格式命令来生成对应的bin文件:

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

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

离线文件的烧录方法

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

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

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

以上就是本次的分享,如有错误欢迎指出,谢谢!

.axf文件_「嵌入式笔记」hex文件、bin文件、axf文件的区别?相关推荐

  1. linux加权_「学员笔记」LINUX随堂笔记(十一):LVS负载均衡群集

    第12章 LVS负载均衡群集 一.群集概述 1.1 群集的类型 无论是哪种群集,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机,根据群集所提 ...

  2. 字符串输出为什么第一个没了_「课堂笔记」Python基础语法:变量和输入输出

    学习了视频课程<财务Python基础--财务人的第一个Python程序|输入输出>,小编特为大家整理了本节内容的文字版笔记,一起来温故知新吧~~ 变 量 一.为什么要引入变量? 在信息计算 ...

  3. bluez 设置绑定pin码_「RT-Thread笔记」IO设备模型及PIN设备

    RTT内核对象--设备 RT-Thread有多种内核对象,其中设备device就是其中一种. 内核继承关系图如下: 设备继承关系图如下: device对象对应的结构体如下: 其中,设备类型type有如 ...

  4. 电脑文件夹可以分屏的软件_「原创文」窗口快速分屏,文件对比复制高效不止一点|每天学一点...

    - 原创声明,侵权必究 - 有没有这种情况,你需要频繁从一个文档中复制文字,然后粘贴到网页中. 又或者两篇文档,你需要复制或者对比 又或者,两个文件夹中对文件进行检查或者对比 这种时候,大家经常频繁的 ...

  5. 大脚导入配置选择哪个文件_「科普向」为何我用大脚时,单体插件会安装失败?...

    说在前面的话 最近在给粉丝解答问题的时候,最大的感觉就是很多有关插件的东西各位可能不是很清楚,虽然之前有在汇总贴里简单的介绍了插件以及助手是什么,他们的关系是怎样,但是除了这些各位还有很多不明白的地方 ...

  6. c++时间片轮转rr进程调度算法_「学习笔记」时间片轮转(RR)调度算法(详解版)...

    关键词:时间, 进程, 调度, 队列, 切换 时间片轮转(RR)时间片轮转(RR)调度算法是专门为分时系统设计的.它类似于 FCFS调度,但是增加了抢占以切换进程. 该算法中,将一个较小时间单... ...

  7. 「学习笔记」黑马面面布局开发

    「学习笔记」黑马面面布局开发 黑马面面布局开发 一.目的 1.1 技术方案 1.2 代码规范 1.2 目录规范 二.流程开发 2.1 蓝湖/摹客协作平台 2.2 适配方案 2.3 初始化文件 2.4 ...

  8. rust主播排行_「Rust日报」2019每周精选 • 第四期

    前言: 从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛.tg channel.Steemit.GitHub.语雀订阅都开通了Rust日报,分享我每天的见闻,偶尔也夹 ...

  9. [免费专栏] Android安全之Android so文件分析「详细版」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  10. 「学习笔记」移动Web开发之flex布局9

    「学习笔记」移动Web开发之flex布局9 一.flex布局体验 1.1 传统布局与flex布局 1.2 初体验 二.flex布局原理 2.1 布局原理 三.flex布局父项常见属性 3.1 常见父项 ...

最新文章

  1. PE文件和COFF文件格式分析——签名、COFF文件头和可选文件头3
  2. 2021年中国工业互联网安全大赛核能行业赛道writeup之数据库登录
  3. 轻量级WEB开发框架flask
  4. 幅度响应怎么计算_系统零点极点与系统频率响应的关系分析(一)
  5. Redis 实现延迟队列?深深被折服!!
  6. JavaScript基础总结(五)——Math对象
  7. 网络登录_发布猫系统登录免费网络推广-绥芬河推广资讯
  8. 小猿圈Java学习之通过命令行设置属性值
  9. 从Flash到Silverlight进阶教程-用代码来创建动画
  10. 疯狂游戏型计算机配置清单,电脑配置清单
  11. 计算机应用基础知道,谁知道计算机应用基础练习题的答案?
  12. ASP.NET 学习笔记_06 Httphandler
  13. Hibernate自动事务揪出的编码不规范
  14. 面试官:Java 线程如何启动的?
  15. 美团股价盘中涨幅超7% 市值重回2万亿港元关口
  16. Instruments工具的使用
  17. 转换FlashFxp站点和FtpRush站点的好工具
  18. Win10华硕atk驱动怎么安装_【打印机安装】WIN10打印机【驱动下载】和【安装方法】...
  19. Python教程传送门,手把手带你学会Python!
  20. 微信支付--网页版-V3-(1)

热门文章

  1. Linux中cinder的作用,11-cinder块存储服务部署
  2. 服务器配置Python环境全过程
  3. 16*16点阵字库HZK16的使用
  4. idea返回上一步快捷键无效
  5. 顶级域名、一级域名、二级域名与IP
  6. CSS3颜色渐变整理
  7. 7月1号连连支付不能提现PayPal了,以后PayPal怎样提现?
  8. 学习笔记 | Inverting Gradients--How easy is it to break privacy in federated learning
  9. input层级高 小程序_解决微信小程序input、textarea层级过高穿透问题
  10. 强大的头像制作神器微信小程序