基于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.pswp.cn/web/72909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72909.shtml
英文地址,請注明出處:http://en.pswp.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設計的是各個器件的電連接。設計的就是各種節點的網絡表關系。不管你器件怎么擺放,好看不好看。都不重要。最終設計電路板是把網絡表中連線的網絡節點都用銅箔實物相連,讓他們導電。 網表導出后我們不用去看他,也不用管他的格式。 我們打開…