Skip to main content

arm-none-eabi+elf文件生成bin文件

keil 工程编译链为外接的 arm-none-eabi-gcc 时, keil 无法生成带偏移地址的 hex 文件, 并且你希望他们自动化. 因此, 可以利用交叉编译链工具 arm-none-eabi-objcopy , 将 elf 文件生成可用的 binhex 文件

bat脚本

@REM keil工程生成hex文件
@REM 当工程编译链为外接的arm-none-eabi-时, keil无法生成带偏移地址的hex文件
@REM arm-none-eabi-objcopy.exe 注意工程对应版本

@echo off
set NAME=xxxxxxx

@REM 使用elf文件转bin文件
@REM 工程中没有.elf文件用.axf代替
cd /d %~dp0
..\..\tools\toolchain\bin\arm-none-eabi-objcopy.exe -O binary ..\Objects\project.elf ..\Objects\project.bin

@REM 创建目标所在文件夹 Firmware
@REM cd /d %~dp0
if exist ..\..\Firmware (
@REM 文件夹已存在
echo Folder already exists
) else (
md ..\..\Firmware
)

@REM cd /d %~dp0
copy ..\Objects\project.bin ..\..\Firmware\%NAME%.bin >nul

@REM cd /d %~dp0
.\srecord-1.63-win32\srec_cat.exe ..\Objects\project.bin -Binary -offset 0x08000000 -o ..\..\Firmware\%NAME%.hex -Intel

补充内容

  • 工程中没有 .elf 文件用 .axf 代替

  • cd /d %~dp0 表示跳转到该文件所在目录

  • >nul 省略成功信息

  • .\xxx.bat $K !L @L $L

    • $K KEIL安装目录

    • !L .axf文件的位置

    • @L .axf文件的文件名

    • $L.axf文件的目录

  • ARMCC的elf->hex

    •   set exe_location=%1ARM\ARMCC\bin\fromelf.exe
      %exe_location% --i32combined --output="..\..\Firmware\project.hex" "..\Objects\project.elf"
  • arm-none-eabi-objcopy.exe 注意工程使用的 arm-gcc 版本