Keil MDK 生成 .bin 固件与 .dis 反汇编文件的方法

Keil MDK 生成 .bin 固件与 .dis 反汇编文件的方法 前言在嵌入式开发中除了生成 .hex 文件有时还需要二进制固件.bin或反汇编文件.dis用于量产烧录、IAP 升级或底层调试。本文介绍如何在 Keil MDK 中通过 fromelf 工具自动生成这两种文件。目录前言一、工具简介二、配置步骤三、验证输出四、应用场景五、常见问题六、小结一、工具简介ARM 编译器套件自带了fromelf工具可对生成的 .axf 镜像进行格式转换与内容提取.bin纯二进制代码无地址信息适合直接烧写到 Flash 起始地址。.dis反汇编文本包含地址、机器码和汇编指令用于分析代码布局或排查疑难 Bug。通过 Keil 的 Run User Programs After Build/Rebuild 功能可在编译成功后自动执行命令省去手动转换的麻烦。二、配置步骤1打开工程进入Project→Options for Target…。2切换到User选项卡。3在After Build/Rebuild区域勾选Run #1和Run #2或只勾选需要的。4在输入框中填入对应命令Run #1生成 .bin 文件fromelf --bin -o $LL.bin $LL.axfRun #2生成 .dis 文件反汇编fromelf --text -a -c --output$LL.dis $LL.axf参数说明$LLKeil 的内置变量代表当前目标工程的文件名不含扩展名如my_project。我这里是test。--bin输出纯二进制文件。--text -a -c输出文本格式的反汇编-a表示输出地址-c表示混合源代码与汇编需要编译时开启了调试信息否则仅显示汇编。--output指定输出文件名。5点击OK保存设置。之后每次编译Build成功就会在工程目录或 .axf 所在目录下自动生成对应的 .bin 和 .dis 文件。提示如果想让 .bin 和 .dis 文件生成在指定文件夹可将$LL.bin替换为相对路径如.\Output\$LL.bin并确保文件夹存在。三、验证输出编译完成后查看工程目录应能看到类似以下的文件-my_project.bin— 可直接烧录的二进制固件。-my_project.dis— 反汇编文本可用记事本打开查阅。在我这里是\test\MDK-ARM\test里面有test.bintest.dis。四、应用场景-.bin 固件适用于串口 IAP / USB 升级时直接传输完整二进制代码生产工具或烧录器只识别 .bin 格式需精确控制固件大小.hex 含地址信息体积更大。-.dis 反汇编常用于分析代码在 Flash 中的实际布局排查 HardFault 等异常时的 PC 指针位置确认关键函数或中断向量表的链接顺序学习 ARM 汇编与编译器优化行为。五、常见问题Q: 编译报错 fromelf 不是内部或外部命令A: Keil 安装目录已包含 fromelf.exe正常情况下会自动定位。如果失败可检查项目路径是否包含中文或特殊字符或将 fromelf 的完整路径如C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe替换命令中的fromelf。Q: 生成的 .dis 文件只有汇编没有源码A: 需要在编译时包含调试信息。进入Options for Target→Output选项卡勾选Debug Information。此外--text -a -c中的-c选项才启用源码混合如果不需要源码去掉-c即可。六、小结通过 Keil 的 After Build 自定义命令可以轻松实现编译后自动输出 .bin 和 .dis 文件。这对嵌入式开发和调试非常实用省去了重复的手动操作。无论是用于 IAP 在线升级还是深入分析代码运行问题这两个文件都能提供有力的帮助。希望这篇短文能帮你完善编译流程。如果有其他好用的 Keil 技巧欢迎交流分享