图档生成bin文件_hex文件、bin文件、axf文件的区别?

2b1b47504f6123172b81875232b9dd88.png

在STM32开发中,经常会碰到hex文件、bin文件与axf文件,这些都是可以烧写到板子里运行的文件。这三个文件有什么区别呢?在这之前,先来一起回顾一下C语言编译的过程:

编译的原理

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

216a5b83356a0a7836ff9f43d5d27076.png

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

99cc7693ef9aea1038fe5bbf73e5cb4f.png

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

696b2f69ab132144e927f3d0185ee641.png

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

da0323e706f4aac35dbbc783259fec77.png

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

bf50c51b82b9012eb08e13c823c3a6a1.png

回归正题,我们的MDK编译时就是使用安装路径下的这些编译工具来完成我们的编译过程。究其本质,我们在cmd命令窗口也是可以通过命令来编译我们的STM32程序的(前提是配好环境变量,否则得到编译工具所在的路径下进行编译),但是我们不会这样干(有这功夫就可以去学学Linux),因为IDE已经给我们提供了很大的便利。比如:

d2f1550a52f943b3a7a927bc6b61a045.png

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

5cfb355aafd7cd165b1d121262035acd.png

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

bd37ccc554777f6d24954d6f47600e64.png

可烧录的文件

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

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

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

bfb2aab2485fd71885795708e3526601.png

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

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

8a0591e738efefaade3d40b2ffc46984.png

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

08c6d115ecf4785fbced318bf37eba9c.png

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

离线文件的烧录方法

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

ac01b8366c5183ef325b31260502212c.png

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

ccf70bfb782d51e102bdafc8f9202127.png

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

fd330f79ec7f3f046e06ba61571d0b0e.png

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值