Keil自动生成Bin文件(2)

情况:之前写过一篇Keil在编译的时候自动生成Bin文件。但是后来在发固件的时候发现了一些小问题。固件需要版本号和时间,生成的固件名每次都需要自己手动修改,增加了很多繁琐的工作量。因此研究写出一个Batch脚本来解决这个问题。


首先提取一下今天的日期

@REM 提取日期
set datevar=%date:~0,4%.%date:~5,2%.%date:~8,2%

 根据自己的文件名,文件路径,存放软件版本号的文件和变量名

@REM 可执行文件(exe)文件名 (要改)
set EXE_NAME=SoftWare
 
@REM 可执行文件(exe)文件路径 (根据自己看需不需要改)
set EXE_PATH=.\Objects

@REM Bin文件输出路径 (根据自己看需不需要改)
set OUTPUT_PATH=..\Output

@REM 软件版本文件路径 (根据自己看需不需要改)
set VERSION_FILE_PATH=..\User\user_sys.h

@REM 软件版本字符串的格式 (要改)
set SOFTWARE_VERSION="SOFTWARE_VERSION"

@REM fromelf文件路径 (查看一下keil软件放在什么目录,根据目录来)
Set FROMELF_PATH=C:\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe

 之后就是获取版本软件号,然后转化为自己需要的格式

打个比方:软件版本号为0x1011,第一位为大版本号1,第二位为中版本号0,第三位-第四位为小版本号11,因为是16进制,所以要转换成10进制数,转换后为 1.0.17

@REM 获取软件版本号
for /f "tokens=3 delims= " %%i in ('type "%VERSION_FILE_PATH%" ^| findstr "%SOFTWARE_VERSION%"') do set SW_Ver=%%i 

@REM 显示原始版本号
echo Original version in hex: %SW_Ver%

@REM 提取大版本号
set "major=!SW_Ver:~2,1!"

@REM 提取中间版本号
set "middle=!SW_Ver:~3,1!"

@REM 提取小版本号
set "minor=!SW_Ver:~4,2!"

@REM 将小版本号从16进制转换为10进制
set /a "minor_dec=(!minor:~0,1!*16)+!minor:~1,1!"

@REM 整合软甲版本号
set Version=%major%.%middle%.%minor_dec%
:: 显示转换后的版本号
echo %Version%

 最后,将版本名和时间拼接,并且转换成bin文件。这样就可以在输出文件夹得到我们想要的bin文件。

@REM 定制Hex文件名
set output_file_name=%EXE_NAME%_V!Version!_%datevar%

@REM 转换并定制Bin文件名
%FROMELF_PATH% --bin "%EXE_PATH%\%EXE_NAME%.axf" --output "%OUTPUT_PATH%\%output_file_name%.bin"

 最后附上完整的代码

@echo off

setlocal EnableDelayedExpansion

@REM 提取日期
set datevar=%date:~0,4%.%date:~5,2%.%date:~8,2%

@REM 可执行文件(exe)文件名 (要改)
set EXE_NAME=SolarFlow
 
@REM 可执行文件(exe)文件路径 (根据自己看需不需要改)
set EXE_PATH=.\Objects

@REM Bin文件输出路径 (根据自己看需不需要改)
set OUTPUT_PATH=..\Output

@REM 软件版本文件路径 (根据自己看需不需要改)
set VERSION_FILE_PATH=..\User\user_sys.h

@REM 软件版本字符串的格式 (要改)
set SOFTWARE_VERSION="SBV_SOFTWARE_VERSION"

@REM fromelf文件路径 (查看一下keil软件放在什么目录,根据目录来)
Set FROMELF_PATH=C:\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe

@REM 获取软件版本号
for /f "tokens=3 delims= " %%i in ('type "%VERSION_FILE_PATH%" ^| findstr "%SOFTWARE_VERSION%"') do set SW_Ver=%%i 

@REM 显示原始版本号
echo Original version in hex: %SW_Ver%

@REM 提取大版本号
set "major=!SW_Ver:~2,1!"

@REM 提取中间版本号
set "middle=!SW_Ver:~3,1!"

@REM 提取小版本号
set "minor=!SW_Ver:~4,2!"

@REM 将小版本号从16进制转换为10进制
set /a "minor_dec=(!minor:~0,1!*16)+!minor:~1,1!"

@REM 整合软甲版本号
set Version=%major%.%middle%.%minor_dec%
:: 显示转换后的版本号
echo %Version%

@REM 定制Hex文件名
set output_file_name=%EXE_NAME%_V!Version!_%datevar%

@REM 转换并定制Bin文件名
%FROMELF_PATH% --bin "%EXE_PATH%\%EXE_NAME%.axf" --output "%OUTPUT_PATH%\%output_file_name%.bin"

@REM 显示输出的文件
echo "Output bin file: %OUTPUT_PATH%\%output_file_name%.bin"

endlocal
::pause
exit

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶舞澎湃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值