当前位置: 首页 > news >正文

Keil编译文件格式转换全解析

目录

介绍

Keil自带常用命令概览

fromelf介绍

Keil可烧录文件概述

核心差异概览

.axf文件获取

.hex文件获取

.bin文件生成

​编辑

补充:生成可执行文件的汇编代码(.asm文件)

Keil自带常用命令详解

核心功能​​

​​格式转换​​

​​输出路径与文件名自动化​

工作流程​​


介绍

        首先,要明确的是:对于Before Build/Rebuild和After Build/Rebuild这样的指令,这是在Keil的User设置页面定义的用户自定义命令,它会在Build/Rebuild执行前/后自动执行。来执行用户希望的一些操作。用户在User Command中填写脚本指令,脚本可以是自己编写,也可以是Keil自带。最后通过是否勾选Run #前面的勾选框,来决定脚本是否运行。

Keil自带常用命令概览

fromelf --bin -o "$L@L.bin" "#L"fromelf --text -s -o "$L@L.sym" "#L"fromelf --text -c -o "$L@L.asm" "#L"

fromelf介绍

大家可以在类似的Keil路径下找到Keil编译所用到的工具,如下图,其中fromelf.exe用于对生成工程文件进行格式转换的,其它.exe的作用可以自行了解,本文不叙述。

Keil可烧录文件概述

上文提到fromelf.exe用于对生成工程文件进行格式转换,keil生成的可烧录文件一般是三种。

  • bin文件(只有程序的二进制数据,没有任何“标签”):需手动指定起始地址。
  • hex文件(Intel制定的标准十六进制文件):包含地址信息(可以直接下载)。
  • axf文件(ARM芯片使用的文件格式,全称ARM Executable File):包含调试信息,debug用。

核心差异概览

​特性​​.axf​​ (ARM Executable Format)​.hex​​ (Intel HEX)​.bin​​ (Binary Image)
​内容​机器码 + 调试信息 + 地址信息机器码 + 地址信息 + 校验和纯二进制机器码
​地址信息​✅ 包含(调试用)✅ 自带存储地址(烧录自动定位)❌ 无(需手动指定起始地址)
​调试信息​✅ 完整(符号表、函数名、变量地址等)❌ 无❌ 无
​文件大小​最大(含额外调试数据)中等(ASCII格式,体积约为bin的2倍)最小(纯二进制)
​可读性​❌ 需专用工具解析✅ 文本格式,可用记事本查看❌ 二进制,需HEX编辑器查看
​烧录方式​不直接烧录(需转换)直接烧录(工具自动解析地址)直接烧录(需手动输入地址)
​典型应用​开发调试阶段(Keil Debug/J-Link J-Scope)量产烧录、串口升级、通用编程器支持Bootloader、OTA升级、存储敏感场景

.axf文件获取

.axf文件,keil默认生成,使用下载器(如J-Link)下载时/Debug调试时,下载的就是.axf文件。

.hex文件获取

勾选"Create HEX File"选择框以生成hex文件。

.bin文件生成

在"After Build/Rebuild"对应的命令行添加生成。

注意:.bin文件生成的时机。

.axf文件是Build/Rebuild生成;.bin文件是由.axf文件生成的,所以这个User Command是放在After Build/Rebuild".

fromelf --bin -o "$L@L.bin" "#L"

补充:生成可执行文件的汇编代码(.asm文件)

        另外,.axf文件也可以生成.asm文件,像C/C++这些高级语言一样,asm(汇编)也是编程语言的一种(底层编程语言),只不过更接近底层,必要时更能帮助开发者分析程序底层逻辑、优化性能或调试问题。

        需要区分的一点是,编程语言(如C/C++,ASM)直面用户,用户可以直接编程;经编译生成的机器语言(如.axf/.hex/.bin)是硬件(如单片机)能够读懂的。

Keil自带常用命令详解

常用的也就以下三个,下面以fromelf.exe --bin -o "$L@L.bin" "#L"详解使用方法。​

​命令示例​​输出内容​​应用场景​
fromelf --bin -o "$L@L.bin" "#L"二进制机器码(.bin)固件烧录、量产部署
fromelf --text -s -o "$L@L.sym" "#L"符号表(函数/变量地址)内存布局分析、链接优化
fromelf --text -c -o "$L@L.asm" "#L"反汇编代码(.asm)底层调试、性能调优

        在Keil编译器中,命令 fromelf --bin -o "$L@L.bin" "#L" 主要用于在编译完成后自动将生成的 .axf 可执行文件转换为可直接烧录到嵌入式设备的二进制文件(.bin)。以下是其详细作用及工作原理解析:

核心功能​

​格式转换​

  • --bin 参数指定输出为二进制格式(.bin),该格式仅包含纯机器码,不含调试信息或符号表,适合直接烧录到微控制器的Flash中。
  • 输入文件 #L 指向Keil编译生成的 .axf 文件(ARM Executable Format),包含完整的程序代码、数据及调试信息。

​输出路径与文件名自动化​

假设.axf文件的绝对路径是:D:\project\output\app.axf

"$L@L.bin":动态生成输出文件的路径和名称:

  • $L:表示 .axf 文件的​​目录路径​​(不含文件名),例如 D:\project\output\
  • @L:表示 .axf 文件的​​主文件名​​(不含扩展名),例如若 .axf 文件为 app.axf,则 @L 为 app"$L@L.bin"组合后输出路径如 D:\project\output\app.bin

"#L":表示输入的.axf文件的完整地址

  • #L:表示完整的 .axf 文件路径(含文件名),例如 D:\project\output\app.axf

工作流程​

  • ​编译触发​​:当Keil完成代码编译并生成 .axf 文件后,该命令作为“构建后操作”(After Build/Rebuild)自动执行。
  • ​转换过程​​:fromelf.exe 解析 .axf 文件,提取纯二进制数据,生成 .bin 文件,并保存到指定路径。
  • ​输出位置​​:生成的 .bin 文件默认位于与 .axf 相同的目录中(通过 $L 指定),文件名与工程设置的 ​​“Name of Executable”​​ 一致。

注意:如果编译时候报错,一般的可能是文件路径问题。注意在下面的设置页正确设置存储路径和文件名,确保输出目录存在。

http://www.xdnf.cn/news/1152397.html

相关文章:

  • 滤波电路Multisim电路仿真实验汇总——硬件工程师笔记
  • XSS的反射型、DOM型、存储型漏洞
  • 语音识别技术:从声音到文字的 AI 魔法
  • 强化学习入门-免模型预测
  • Django母婴商城项目实践(十一)- 用户信息模块之用户登录注册
  • [每日随题11] 贪心 - 数学 - 区间DP
  • 让Logo/文字“自己画自己”!✨
  • Linux某个进程CPU占用率高原因定位手段
  • 从零手写红黑树(C++实现详解)
  • 142. 环形链表 II
  • FPGA自学——整体设计思路
  • Python Pandas读取Excel表格中数据并根据时间字段筛选数据
  • 使用 validation 框架生成一个校验参数是否在枚举内的校验器
  • 结合python面向对象编程,阐述面向对象三大特征
  • 【RK3576】【Android14】调试方法
  • 【理财】为什么要进行资金预留
  • QT动态加载动态库 QLibrary
  • 基于dcmtk的dicom工具 第六章 StoreSCU 图像发送
  • C语言:20250719笔记
  • docker|Linux|以centos基础镜像为基础制作nmap专用镜像(镜像瘦身计划)
  • 物联网系统中-告警配置功能的定义
  • MyBatis动态SQL全解析:五大核心标签实战指南
  • 加线机 和 胶带机
  • MyBatis之缓存机制详解
  • Go-Redis × RediSearch 全流程实践
  • #Datawhale组队学习#7月-强化学习Task2
  • 板子 5.29--7.19
  • Git仓库使用
  • Python关于numpy的基础知识
  • 若依部署项目到服务器