良许Linux教程网 干货合集 hex文件、bin文件、axf文件的区别?

hex文件、bin文件、axf文件的区别?

在STM32的开发活动中,我们经常会遇见如hex文件、bin文件以及axf文件等格式,这些文件都是用于将编写的程序上传至目标开发板并执行的。那么,这几种文件格式之间具体有何区别呢?在探讨这个话题之前,不妨再次浏览一下C语言编译流程的要点:

关于编译流程

在我们之前的C语言学习笔记《C程序的编译之旅》中,我们曾经简略地探究了C语言编译过程的关键步骤:

image-20240119202508420
image-20240119202508420

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

image-20240119202511357
image-20240119202511357

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

image-20240119202514293
image-20240119202514293

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

image-20240119202516897
image-20240119202516897

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

image-20240119202519495
image-20240119202519495

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

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

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

image-20240119202522049
image-20240119202522049

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

image-20240119202524908
image-20240119202524908

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

image-20240119202527673
image-20240119202527673

可烧录的文件

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

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

axf文件是编译默认生成的文件,不仅包含代码数据,而且还包含着调试信息,在MDK里进行debug调试用的就是这个文件。

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

image-20240119202530140
image-20240119202530140

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

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

image-20240119202532741
image-20240119202532741

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

image-20240119202535593
image-20240119202535593

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

离线文件的烧录方法

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

image-20240119202540170
image-20240119202540170

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

image-20240119202542885
image-20240119202542885

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

![图片](data:image/svg+xml,%3C%3Fxml version=’1.0′ encoding=’UTF-8’%3F%3E%3Csvg width=’1px’ height=’1px’ viewBox=’0 0 1 1′ version=’1.1′ xmlns=’http://www.w3.org/2000/svg’ xmlns:xlink=’http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=’none’ stroke-width=’1′ fill=’none’ fill-rule=’evenodd’ fill-opacity=’0’%3E%3Cg transform=’translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=’249′ y=’126′ width=’1′ height=’1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

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

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部