基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法


  • 已经弃用的版本(Version 10.3-2021.10):gcc-arm-none-eabi:https://developer.arm.com/downloads/-/gnu-rm
  • Arm GNU Toolchain当前版本:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

✨如果是基于MDK Keil ARMCC编译器,可以借助自带的fromelf.exe 进行转换,如果使用arm GNU Toolchain工具链编译所生成的.elf文件,不要使用fromelf.exe 进行转换,两者不能混用。否则转换后的文件烧录不能正常运行。

📗通过arm GNU Toolchain编译后手动生成的.elf格式文件转换

在命令行中手动运行以下命令,确保 arm-none-eabi-objcopy.exe 可以正常工作:

  • 手动转换命令:
"D:\arm-gnu-toolchain\bin\arm-none-eabi-objcopy.exe" -O ihex "D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.elf" "D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.hex"

在这里插入图片描述

  • 为了实现快速转换,可以制作一个.bat批处理文件,实现方便快捷转换。
  • convert_elf_to_hex_bin.bat
@echo off
echo Converting .elf to .hex and .bin...REM 定义工具路径和输入输出文件路径
set OBJCOPY="D:\arm-gnu-toolchain\bin\arm-none-eabi-objcopy.exe"
set ELF_FILE="D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.elf"
set HEX_FILE="D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.hex"
set BIN_FILE="D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.bin"REM 转换为 .hex 文件
%OBJCOPY% -O ihex %ELF_FILE% %HEX_FILE%
if %errorlevel% equ 0 (echo .hex file created successfully.
) else (echo Failed to create .hex file.exit /b 1
)REM 转换为 .bin 文件
%OBJCOPY% -O binary %ELF_FILE% %BIN_FILE%
if %errorlevel% equ 0 (echo .bin file created successfully.
) else (echo Failed to create .bin file.exit /b 1
)echo Conversion completed.
pause

在这里插入图片描述

📗通过arm GNU Toolchain编译后自动生成的.elf格式文件转换

  • 在Windows平台下,通过cmakelist.txt文件,使用cmake构建文件,通过make/ninja生成的.elf格式文件,.elf格式文件本身是可以支持DAP-LINK、jlink配合相对应的配置文件是可以在线烧录的。有些时候需要其他方式烧录,例如串口、做IAP升级使用时,则需要hex或者bin文件。
  • 需要提前在 CMakeLists.txt文件中添加编译后的文件转换脚本:
# 定义生成的文件路径
set(ELF_FILE ${TARGET_NAME}.elf)
set(HEX_FILE ${TARGET_NAME}.hex)# 定义生成的 ELF 文件路径
set(ELF_FILE ${CMAKE_BINARY_DIR}/${TARGET_NAME}.elf)# 定义生成的 HEX 文件路径
set(HEX_FILE ${CMAKE_BINARY_DIR}/${TARGET_NAME}.hex)# 定义 objcopy.exe 路径
set(OBJCOPY_PATH "D:/arm-gnu-toolchain/bin/arm-none-eabi-objcopy.exe")# 定义生成的 ELF 文件路径
set(ELF_FILE ${CMAKE_BINARY_DIR}/${TARGET_NAME}.elf)# 定义生成的 HEX 文件路径
set(HEX_FILE ${CMAKE_BINARY_DIR}/${TARGET_NAME}.hex)
set(BIN_FILE ${TARGET_NAME}.bin)# 添加自定义命令,在编译完成后自动生成 HEX 文件
add_custom_command(TARGET ${TARGET_NAME} POST_BUILDCOMMAND ${OBJCOPY_PATH} -O ihex ${ELF_FILE} ${HEX_FILE}COMMENT "Converting ELF to HEX"VERBATIM
)# 添加自定义命令,在编译完成后自动生成 BIN 文件
add_custom_command(TARGET ${TARGET_NAME} POST_BUILDCOMMAND ${OBJCOPY_PATH} -O binary ${ELF_FILE} ${BIN_FILE}COMMENT "Converting ELF to BIN"VERBATIM
)
  • 其中arm-none-eabi-objcopy.exe文件在arm-gnu-toolchain\bin\arm-none-eabi-objcopy.exe

📘MDK keil工程中hex/bin文件转换方法

方法一:使用Keil软件内置功能
1.打开Keil软件,选择菜单栏中的“File”。
2.选择“Convert HEX to BINARY”选项。
3.在弹出的窗口中选择要转换的HEX文件,并指定转换后的BIN文件的保存路径。
4.点击“Convert”按钮,完成转换后,可以在指定的保存路径找到生成的BIN文件。
方法二:使用fromelf工具

fromelf --bin -o "output_file.bin" "input_file.hex"

其中,–bin选项指示程序输出二进制格式的数据,-o后面跟随的是期望保存结果的位置和文件名,最后是待处理源文件的具体路径与名称。
自动化处理
为了在编译过程中自动生成BIN文件,可以在Keil的项目设置中进行配置:
1.进入“Options for Target”的设置界面。
2.在User标签页中勾选Run#2,并按照模板填写如下指令字符串:
在这里插入图片描述

fromelf.exe --bin -o ./release.bin !L

每当成功编译完成后,就会依据设定好的规则在指定位置生成对应的BIN文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/72909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

希尔排序中的Hibbard序列

一 定义 Hibbard序列的每个元素由以下公式生成: h_k = 2^k - 1 其中k从1开始递增,序列为:1, 3, 7, 15, 31, 63, … 二 生成方式 起始条件:k=1,对应h_1=2^1-1=1 递推公式:每次k增加1,计算 h_{k+1}=2^{k+1}-1 示例:前5项…

失败的面试经历(ʘ̥∧ʘ̥)

一.面向对象的三大特性 1.封装:将对象内部的属性私有化,外部对象不能够直接访问,但是可以提供一些可以使外部对象操作内部属性的方法。 2.继承:类与类之间会有一些相似之处,但也会有一些异处,使得他们与众…

算法及数据结构系列 - 二分查找

系列文章目录 算法及数据结构系列 - BFS算法 文章目录 二分查找框架思路经典题型二分查找寻找左侧边界寻找右侧边界 刷题875. 爱吃香蕉的珂珂1011. 在 D 天内送达包裹的能力392. 判断子序列 二分查找 框架思路 int binarySearch(int[] nums, int target) {int left 0, righ…

SpringBoot的启动原理?

大家好,我是锋哥。今天分享关于【SpringBoot的启动原理?】面试题。希望对大家有帮助; SpringBoot的启动原理? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot的启动原理主要是通过 SpringApplication 类来…

代码随想录第55期训练营第八天|LeetCode344.反转字符串、541.反转字符串II、卡码网:54.替换数字

前言 这是我参加的第二次训练营!!!爽!这次我将更加细致的写清每一道难题,不仅是提升自己,也希望我自己的写的文章对读者有一定的帮助! 打卡代码随想录算法训练营第55期第八天(づ&a…

Json的应用实例——cad 二次开发c#

以下是一个使用AutoCAD C#.NET API实现你需求的示例代码,代码实现了提示用户选择一个实体,将一些字符串变量及其对应的值组成JSON格式数据存储到实体的扩展数据(XData)中,并在弹出窗口中显示该实体的所有扩展数据信息。…

Springboot的jak安装与配置教程

目录 Windows系统 macOS系统 Linux系统 Windows系统 下载JDK: 访问Oracle官网或其他JDK提供商网站,下载适合Windows系统的JDK版本。网站地址:Oracle 甲骨文中国 | 云应用和云平台点击进入下滑,点击进入下载根据自己的系统选择&…

Python与区块链隐私保护技术:如何在去中心化世界中保障数据安全

Python与区块链隐私保护技术:如何在去中心化世界中保障数据安全 在区块链世界里,透明性和不可篡改性是两大核心优势,但这也带来了一个悖论——如何在公开账本的同时保障用户隐私?如果你的交易记录对所有人可见,如何防止敏感信息泄露? Python 作为区块链开发中最受欢迎的…

通俗详解redis底层数据结构哈希表之渐进式rehash

一、为什么要用渐进式rehash? 假设你家的旧柜子(哈希表)装满了,需要换个大柜子。如果一次性把所有东西倒腾到新柜子,你可能得停下手头所有事,累得半死(这就是传统rehash的问题:卡顿…

基于 FPGA的HLS技术与应用

1、hls简介 HLS ( high level synthesis )即高层次综合,主要是利用高级编程语言实现算法。 2、循环优化 绝大多数循环都以串行的方式执行,这种执行方式比较浪费时间。对于串行的循环有两种优化方式,转为 并行( Unrol…

Kafka consumer_offsets 主题深度剖析

Kafka consumer_offsets 主题深度剖析 在 Apache Kafka 的消息消费机制中,确保消息被可靠消费是一个核心问题。为了解决这个问题,Kafka 设计了一个特殊的内部主题 consumer_offsets,用于跟踪和管理消费者组的消费进度。 consumer_offsets 的…

基于javaweb的SpringBoot时装购物系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

B站pwn教程笔记-5

复习和回顾 首先复习一下ELF文件在内存和磁盘中的不同。内存只关注读写这权限,会合并一些代码段。 动态链接库只在内存中单独装在一份 因为很多软件都要用动态链接库了,不可能一个个单独复制一份。但是在有的调试环境下会单独显示出来各一份。 ld.so是装…

云原生网络拓扑:服务网格的量子纠缠效应

引言:数据平面的虫洞跃迁 谷歌服务网格每日处理5万亿请求,Istio 1.20版本时延降低至0.8ms。蚂蚁集团Mesh架构节省42%CPU开销,AWS App Mesh实现100ms跨区故障切换。LinkedIn Envoy配置规则达1200万条,腾讯云API网关QPS突破900万。…

爬虫——playwright获取亚马逊数据

目录 playwright简介使用playwright初窥亚马逊安装playwright打开亚马逊页面 搞数据搜索修改bug数据获取翻页优化结构 简单保存 playwright简介 playwright是微软新出的一个测试工具,与selenium类似,不过与selenium比起来还是有其自身的优势的&#xff…

Matrix-Breakout-2-Morpheus靶场通关心得:技巧与经验分享

1.安装靶机,并在虚拟机打开,确保和kali在同一个NAT网段 2.使用kali来确定该靶机的IP nmap -O 192.168.139.1/24 3.访问该IP192.168.139.171 4.访问robots.txt 5.扫描目录 gobuster dir -u http://192.168.139.171 -x php,bak,txt,html -w /usr/share/d…

机器学习扫盲系列(2)- 深入浅出“反向传播”-1

系列文章目录 机器学习扫盲系列(1)- 序 机器学习扫盲系列(2)- 深入浅出“反向传播”-1 文章目录 前言一、神经网络的本质二、线性问题解析解的不可行性梯度下降与随机梯度下降链式法则 三、非线性问题激活函数 前言 反向传播(Ba…

(一)飞行器的姿态欧拉角, 欧拉旋转, 完全数学推导(基于坐标基的变换矩阵).(偏航角,俯仰角,横滚角)

(这篇写的全是基矢变换矩阵)不是坐标变换矩阵,坐标变换矩阵的话转置一下,之后会有推导. 是通过M转置变换到P撇点.

C语言和C++到底有什么关系?

C 读作“C 加加”,是“C Plus Plus”的简称。 顾名思义,C 就是在 C 语言的基础上增加了新特性,玩出了新花样,所以才说“Plus”,就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。 C 语言是 1972 年由美国贝…

PCB画图软件PROTEL99SE学习-05画出铜箔来

sch设计的是各个器件的电连接。设计的就是各种节点的网络表关系。不管你器件怎么摆放,好看不好看。都不重要。最终设计电路板是把网络表中连线的网络节点都用铜箔实物相连,让他们导电。 网表导出后我们不用去看他,也不用管他的格式。 我们打开…