news 2026/6/10 19:34:31

keil5 自动生成 .elf文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
keil5 自动生成 .elf文件

想看更多嵌入式干货、工具技巧,踩坑记录,也欢迎关注:公众号:啊哈哈哈111

由于 keil5 默认不生成 .elf 文件,所以需要一个脚本实现编译项目的同时生成 .elf 文件,使用 e2 studio 或 STM32CubeIDE 这类 IDE 会自动生成.elf 文件。

  1. 1. 打开 keil5 安装目录的文件夹📂 Keil_v5 。

  1. 2. 在此目录下新建文件夹📂 Postbuild 。

  1. 3. 在新建的📂 Postbuild 文件夹下新建文件 postbuild.bat 。

  1. 4. 用记事本打开并复制粘贴下面的代码,然后保存。

@echo off setlocal enabledelayedexpansion rem ============================================================================== rem Post‑Build 脚本:自动调用 fromelf.exe 生成 ELF / BIN / HEX rem 2025‑07‑25 修正版 rem ============================================================================== rem ────────────────────────────────────────────────────────────────────────────── rem 【可选】手动指定 fromelf.exe 路径(如需固定版本,可取消下一行注释并修改) rem set "FROMELF=C:\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe" rem ────────────────────────────────────────────────────────────────────────────── rem —— 缓存文件(存储已找到的 fromelf.exe 全路径) —— set "CACHE_FILE=%~dp0fromelf_path.cache" rem ============================================================================== rem 1) 自动查找 fromelf.exe rem ============================================================================== if not defined FROMELF ( rem 1‑a 从缓存读取 if exist "%CACHE_FILE%" ( set /p FROMELF=<"%CACHE_FILE%" if exist "!FROMELF!" ( echo [PostBuild] Found from cache: !FROMELF! ) else ( echo [PostBuild] Cache invalid, deleting... del "%CACHE_FILE%" 2>nul set "FROMELF=" ) ) rem 1‑b 已知路径(Keil 根目录下 ARM\ARMCLANG 或 ARM\ARMCC) if not defined FROMELF ( rem ▼▼▼ 关键修复:正确获取上一级目录完整路径 ▼▼▼ for %%I in ("%~dp0..") do set "KEIL_ROOT=%%~fI" rem ▲▲▲ 关键修复完毕 ▲▲▲ if exist "!KEIL_ROOT!\ARM\ARMCLANG\bin\fromelf.exe" ( set "FROMELF=!KEIL_ROOT!\ARM\ARMCLANG\bin\fromelf.exe" ) else if exist "!KEIL_ROOT!\ARM\ARMCC\bin\fromelf.exe" ( set "FROMELF=!KEIL_ROOT!\ARM\ARMCC\bin\fromelf.exe" ) if defined FROMELF ( echo [PostBuild] Found at known path: !FROMELF! echo !FROMELF!>"%CACHE_FILE%" ) ) rem 1‑c 递归搜索(最后手段) if not defined FROMELF ( echo [PostBuild] Recursively searching under "!KEIL_ROOT!"... for /f "delims=" %%F in ('where /r "!KEIL_ROOT!" fromelf.exe 2^>nul') do ( set "FROMELF=%%~F" goto :FOUND_FROMELF ) echo [Error] Could not find fromelf.exe under "!KEIL_ROOT!". exit /b 1 ) ) :FOUND_FROMELF echo [PostBuild] Using fromelf.exe: !FROMELF! rem ============================================================================== rem 2) 参数检查 rem ============================================================================== if "%~1"=="" ( echo [Error] No .axf file path provided. echo [Info ] Please configure Keil “After Build / User Command” 类似: echo C:\Keil_v5\Postbuild\postbuild.bat "#L" exit /b 1 ) rem .axf 完整路径 set "fullpath=%~1" rem ============================================================================== rem 3) 用户开关(1=启用,0=禁用) rem ============================================================================== set GENERATE_ELF=1 set GENERATE_BIN=0 set GENERATE_HEX=0 rem ============================================================================== rem 4) 提取文件名(name) 和 输出目录(dir) rem ============================================================================== for %%A in ("!fullpath!") do ( set "name=%%~nA" set "dir=%%~dpA" ) rem 去掉末尾反斜杠 set "dir=!dir:~0,-1!" echo. echo [PostBuild] Processing: !fullpath! echo [PostBuild] Output Dir: !dir! rem ============================================================================== rem 5) 生成文件 rem ============================================================================== if "!GENERATE_ELF!"=="1" ( echo [PostBuild] Generating ELF... "!FROMELF!" --elf --output "!dir!\!name!.elf" "!fullpath!" ) if "!GENERATE_BIN!"=="1" ( echo [PostBuild] Generating BIN... "!FROMELF!" --bin --output "!dir!\!name!.bin" "!fullpath!" ) if "!GENERATE_HEX!"=="1" ( echo [PostBuild] Generating HEX... "!FROMELF!" --i32 --output "!dir!\!name!.hex" "!fullpath!" ) echo [PostBuild] Done. endlocal
  1. 5. 打开 keil5 的项目,打开 "Options for Target..." (魔术棒图标 🪄)。切换到 "User" 选项卡。找到 "After Build/Rebuild" 下的 "User Command" 并勾选"Run#1"。点击文件夹📂图标,选中之前新建postbuild.bat 文件并打开,在点击"User Command"修改该命令,在命令的最后加上 空格"#L" "#L",最后点击 OK。

  1. 6. keil5 中点击编译,出现如下表示生成 .elf 文件成功,现在每次编译都会生成,生成的文件在.hex 文件同目录: [PostBuild] Generating ELF... [PostBuild] Done.

如果.bat 脚本没有自动查找到 fromelf.exe , 请手动修改路径。

完整步骤视频:

MCUViewer

想看更多嵌入式干货、工具技巧,踩坑记录,也欢迎关注:公众号:啊哈哈哈111

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 4:26:55

Jmeter录制手机app脚本

环境准备&#xff1a; 1.手机 2.wifi 3.Jmeter 具体步骤&#xff1a; 1、启动Jmeter&#xff1b; 2、“测试计划”中添加“线程组”&#xff1b; 3、“工作台”中添加“HTTP代理服务器”&#xff1b; 4、配置代理服务器&#xff1a;Global Settings下面的端口配置&…

作者头像 李华
网站建设 2026/6/8 22:33:04

CC攻击对服务器正常运行会有什么影响?如何预防和解决CC攻击?

CC攻击&#xff08;Challenge Collapsar攻击&#xff09;是一种针对服务器的常见DDoS攻击类型&#xff0c;通过大量伪造的正常请求&#xff0c;耗尽服务器资源或带宽&#xff0c;从而导致服务器性能下降甚至瘫痪。以下将详细说明CC攻击对服务器的影响&#xff0c;以及如何预防和…

作者头像 李华
网站建设 2026/6/10 13:35:06

终极CRT-Royale使用指南:5步为现代游戏注入复古灵魂

CRT-Royale是一个专为ReShade平台设计的高级着色器项目&#xff0c;通过精确模拟老式显示器的物理特性&#xff0c;为现代游戏画面赋予经典的视觉魅力。这个免费开源工具能够重现扫描线、荧光粉掩模和几何失真等真实效果&#xff0c;让玩家重温怀旧游戏体验。 【免费下载链接】…

作者头像 李华
网站建设 2026/6/9 14:48:04

Docker权限配置错误导致AI模型被劫持?你不可不知的7种防御手段

第一章&#xff1a;Docker权限配置错误导致AI模型被劫持&#xff1f;你不可不知的7种防御手段在容器化部署日益普及的今天&#xff0c;Docker已成为AI模型服务发布的首选平台。然而&#xff0c;不当的权限配置可能使攻击者通过特权容器访问宿主机资源&#xff0c;进而篡改模型参…

作者头像 李华