找回密码
 立即注册
查看: 51|回复: 2

keil C51 C251能否自动生成HEX带版本号的文件名

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:160
  • 最近打卡:2025-08-05 08:49:59
已绑定手机

3

主题

42

回帖

357

积分

中级会员

积分
357
发表于 前天 09:26 | 显示全部楼层 |阅读模式
就像keil MDK运行的批处理文件



@REM 请根据实际情况修改以下变量,注意如果使用相对路径,需要以KEIL的工程文件路径为基准,而非本脚本所在路径

@REM KEIL 设置中的输出文件名
set EXEC_NAME=UVPrj
@REM KEIL 设置中的输出文件路径
set OBJ_PATH=..\Output
@REM 输出文件路径
set OUTPUT_PATH=..\Output
@REM 包含版本字符串文件的路径
set VERSION_FILE_PATH=..\User\main.c
@REM fromelf.exe 的路径(KEIL安装目录)
set FROMELF_PATH=C:\Keil_v5\ARM\ARMCC\bin
@REM 版本字符串的格式
set VERSION_PATTERN="#define SOFTWARE_VERSION"

@REM 获取日期【这里的日期格式为 YYYY-MM-HH hh:mm:ss,不同时区或配置下格式可能不同,请自行调整】
set YEAR=%DATE:~2,2%
set MONTH=%DATE:~5,2%
set DAY=%DATE:~8,2%


回复

使用道具 举报 送花

3

主题

2097

回帖

1042

积分

等待验证会员

积分
1042
发表于 前天 09:28 | 显示全部楼层
在使用Keil C51或C251进行嵌入式开发时,用户常希望在编译过程中自动生成带有版本号的HEX文件,以提高工程管理的效率和可追溯性。虽然Keil C51和C251本身并不直接支持通过内置功能自动添加版本信息到HEX文件名中,但可以通过结合批处理脚本、版本控制文件以及命令行工具实现类似功能,其原理与Keil MDK中的做法相似。

在Keil MDK中,通常通过调用fromelf工具将生成的.axf文件转换为.hex文件,并利用批处理脚本动态构建文件名,包括日期、版本号等信息。对于Keil C51/C251,虽然没有fromelf这样的独立工具,但可以借助Keil的命令行接口(如UV4)配合外部脚本实现类似效果。

以下是一个适用于Keil C51/C251的示例批处理脚本,用于在编译完成后自动生成带版本号的HEX文件:
  1. batch
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. REM 设置工程路径
  5. set PRJPATH=C:\Project\YourProject.uvproj
  6. set OUTPUTPATH=C:\Project\Output
  7. set VERSIONFILE=C:\Project\User\version.h
  8. REM 从版本文件中提取版本号
  9. set VERSION=
  10. for /f "tokens=2 delims=#" %%a in ('findstr "#define SOFTWAREVERSION" %VERSIONFILE%') do (
  11.     set VERSION=%%a
  12. )
  13. REM 获取当前日期
  14. set DATE=%date:~0,4%%date:~5,2%%date:~8,2%
  15. REM 构建输出文件名
  16. set FILENAME=Projectv%VERSION%%DATE%.hex
  17. set OUTPUTFILE=%OUTPUTPATH%\%FILENAME%
  18. REM 调用Keil命令行编译
  19. "C:\Keilv5\C51\BIN\UV4" -c %PRJPATH% -o %OUTPUTPATH%\Project.hex
  20. REM 将生成的HEX文件重命名为带版本号的名称
  21. if exist "%OUTPUTPATH%\Project.hex" (
  22.     move /Y "%OUTPUTPATH%\Project.hex" "%OUTPUTFILE%"
  23.     echo HEX文件已生成并重命名为:%FILENAME%
  24. ) else (
  25.     echo 未找到生成的HEX文件。
  26. )
复制代码

该脚本的主要逻辑如下:

1. 设置工程路径:指定Keil工程文件路径和输出目录。
2. 读取版本信息:从版本头文件中提取版本字符串。
3. 获取日期信息:用于构建时间戳。
4. 构建文件名:组合版本号与日期,生成带标识的HEX文件名。
5. 调用Keil命令行:执行编译操作。
6. 重命名HEX文件:将默认生成的HEX文件重命名为带版本号的格式。

此方法虽需手动配置路径和版本文件,但能够有效提升工程管理的规范性和自动化程度。此外,若需进一步扩展,可结合版本控制系统(如Git)自动获取提交哈希值作为版本标识,实现更精细的版本追踪。

综上所述,尽管Keil C51/C251不直接支持带版本号的HEX文件自动生成,但通过合理的脚本设计与工具调用,仍可实现与Keil MDK类似的自动化流程,满足嵌入式开发中对版本管理和文件管理的需求。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:614
  • 最近打卡:2025-08-05 13:30:39
已绑定手机

54

主题

1880

回帖

3470

积分

论坛元老

积分
3470
发表于 前天 09:36 | 显示全部楼层
国芯人*** 发表于 2025-8-3 09:28
在使用Keil C51或C251进行嵌入式开发时,用户常希望在编译过程中自动生成带有版本号的HEX文件,以提高工程 ...

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-5 15:23 , Processed in 0.115890 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表