目录
【前言】
在Keil MDK的集成开发环境中,默认情况下确实可以生成.axf格式的调试文件和.hex格式的可执行文件。这两种格式的文件各有其优势,特别是对于使用ULINK2仿真器的下载和调试过程非常有利。然而,对于习惯使用ADS(ARM Developer Suite)的用户以及部分嵌入式软件开发者来说,他们可能更倾向于使用.bin格式的文件。
一、各文件类型的特点
-
.axf文件:
- 全称:Absolute and Executable Format,即绝对可执行格式文件。
- 内容:该文件不仅包含了程序的二进制代码,还包含了调试信息,如符号表、源代码行号等,有助于开发者在调试过程中快速定位问题。
- 用途:主要用于调试,因为它包含了丰富的调试信息,使得开发者可以在IDE中设置断点、查看变量值等。
-
.hex文件:
- 全称:Intel Hexadecimal Object File Format,即Intel十六进制对象文件格式。
- 内容:该文件主要包含了程序的二进制代码,以及用于指示程序在内存中位置的地址信息。
- 用途:主要用于程序的下载和烧录,因为它以一种简单的格式表示了程序的二进制内容和地址信息,便于烧录工具将其写入到微控制器的Flash中。
-
.bin文件:
- 全称:Binary File,即二进制文件。
- 内容:该文件是纯粹的二进制代码,不包含任何调试信息或地址信息,仅包含程序的实际执行代码。
- 用途:主要用于直接烧录到微控制器的Flash中,或者用于需要通过特定烧录工具进行程序下载的场景。由于它不包含调试信息,因此文件大小相对较小,适合在存储空间有限的环境中使用。
二、为何需要.bin文件
尽管.axf和.hex文件在开发过程中非常有用,但某些情况下开发者可能更倾向于使用.bin文件,甚至有些嵌入式软件开发者已经拥有了*.bin格式文件的调试或烧写工具。
- 兼容性:一些旧的或特定的烧录工具可能只支持.bin格式的文件。
- 空间效率:.bin文件通常不包含调试信息,因此文件大小相对较小,适合在存储空间有限的环境中使用。
- 习惯因素:部分开发者可能由于长期使用特定工具或遵循团队规范,已经习惯了使用.bin格式的文件。
三、如何生成.bin文件
为了充分发挥Realview MDK集成开发环境的优势,将*.axf格式文件或*.hex格式文件转换成*.bin格式的文件是十分自然的想法,但是在Keil MDK中默认并不能直接生成.bin文件,但开发者可以通过以下几种方式间接来获得:
方法一:使用fromelf工具转换
ARM公司的RVCT(RealView Compilation Tools)开发套件中包含了一个名为fromelf
的工具,该工具可以将.axf或.hex文件转换为*.bin格式。在Keil MDK中,这个工具通常位于安装目录下的某个子文件夹中,如ARM\ARMCC\bin
或ARM\BIN
等。
fromelf.exe转换工具的语法格式如下:
fromelf [options] input_file
其中[options]包括的选项如下表
fromelf
使用步骤大致如下:
- 编译并生成*.axf文件(如果尚未生成)。
- 打开命令行工具(如CMD、PowerShell等)。
- 导航到
fromelf
工具所在的目录,或者使用完整路径直接调用该工具。 - 执行转换命令,例如:
fromelf --bin -o output.bin input.axf
,其中output.bin
是输出的.bin文件名,input.axf
是输入的.axf文件名。
上述方法每次都需要生成axf文件后再次调用工具进行转换,使用起来相当比较麻烦,因此在掌握了fromelf转换工具的语法格式以后,我们可以尝试使用 MDK自动调用fromelf
。
方法二:通过MDK的用户脚本执行转换
在MDK中,用户可以通过设置“Run User Programs After Build/Rebuild”来在编译或重建完成后自动执行脚本或命令行工具。这样,每次编译完成后,MDK都会自动调用fromelf
工具或其他转换工具来生成*.bin文件。
设置步骤大致如下:
- 打开MDK的项目选项(Options for Target)。
- 切换到“User”标签页。
- 在“After Build/Rebuild”区域中,勾选“After Build/Rebuild”,并输入转换命令。 在用户命令行输入要执行的命令,例如: E:\Keil5\ARM\ARMCC\bin\fromelf.exe --bin -o F:\STM32\Template\USER\Objects\Test.bin F:\STM32\Template\USER\Objects\Template.axf
E:\Keil5\ARM\ARMCC\bin\fromelf.exe --bin -o :命令表示从可执行文件生成bin文件
F:\STM32\Template\USER\Objects\Test.bin:生成的bin文件的路径和文件名
F:\STM32\Template\USER\Objects\Template.axf :可执行文件的路径和文件名 (上述标红的路径根据工程存放路径自行修改即可)
- 保存设置并重新编译项目,MDK将在编译完成后自动执行转换命令并生成*.bin文件。到对应路径下便可找到生成的.bin文件
方法三:使用第三方工具转换
除了ARM官方提供的fromelf
工具外,还有一些第三方工具也可以将.axf或.hex文件转换为*.bin格式。这些工具可能具有不同的用户界面和选项设置,但基本原理与使用fromelf
类似。用户可以根据自己的需求选择合适的工具进行转换。
四、注意事项
- 在使用fromelf工具或其他转换工具时,请确保已经正确安装了这些工具,并了解其基本用法和选项设置。
- 转换过程中可能会遇到路径错误、文件权限不足等问题,请根据错误提示进行相应的检查和调整。
- 不同版本的Keil MDK和工具链中,文件生成和转换的具体方法可能有所不同,请参考对应版本的官方文档或在线资源以获取准确信息。