最早做网站的那批人,wordpress 是免费的嘛,绍兴建设开发有限公司网站首页,网站怎么做ipfsKeil编译程序生成bin文件时#xff0c;如何自动以版本号命名bin文件 一、目的二、方法三、实现过程1、脚本形式2、可执行文件形式 一、目的
Keil编译程序时#xff0c;生成的Hex/Bin文件名字是根据Keil中工程配置里定的名字命名。通常代码里会有一个字段专门用来定义软件版本… Keil编译程序生成bin文件时如何自动以版本号命名bin文件 一、目的二、方法三、实现过程1、脚本形式2、可执行文件形式 一、目的
Keil编译程序时生成的Hex/Bin文件名字是根据Keil中工程配置里定的名字命名。通常代码里会有一个字段专门用来定义软件版本号每次生成Hex/Bin文件后要手动重命名文件名保证和代码中定义的软件版本号一致这时候就会觉得很麻烦而且手动输入容易输错啥的。本章的内容就是要达到编译后生成的Hex/Bin文件名字和代码中定义的软件版本号一致的目的
二、方法
我所知道的方法有两类 一通过脚本的形式。 keil工程配置里面可以添加脚本即.bat程序。脚本程序能够实现重命名Hex/Bin文件名、从一个路径拷贝到另一个路径下、生成新文件夹用于存储新命名的Hex/Bin文件等等。
二通过可执行文件的形式。 keil工程配置里面可以添加可执行文件即.exe程序。可执行程序能够实现打开源文件找到版本号、重命名Hex/Bin文件名、从一个路径拷贝到另一个路径下、生成新文件夹用于存储新命名的Hex/Bin文件、Hex/Bin文件合并通常bootapp等等很多功能都能实现。
以上两种方法能实现的功能还有很多同样重新命名可执行文件也还有其他很多方法实现如有其他更便捷有效的方法也可以分享。
三、实现过程
1、脚本形式
以时间为文件名尾缀如LED_HV_V20230815_15_42_28.bin。 本例是将bin文件从Object文件夹copy到ExecutiveFile文件夹并在尾缀上加上日期“年_月_日_时_分_秒”。 有的也用__DATA__和__TIME__其中__DATE_ 和__TIME__是C语言中的内置宏分别是当前的编译日期和编译时间,也可以。
代码如下
echo off
::获取日期 将格式设置为20110820
set datevar%date:~0,4%%date:~5,2%%date:~8,2%_
::获取时间中的小时 将格式设置为24小时制
set timevar%time:~0,2%
if /i %timevar% LSS 10 (
set timevar0%time:~1,1%
)
::获取时间中的分、秒 将格式设置为3220 表示 32分20秒
set timevar%timevar%_%time:~3,2%_%time:~6,2%
echo %datevar%%timevar%copy Objects\LED_HV.hex ExecutiveFile\LED_HV_V%datevar%%timevar%.hex
copy Objects\LED_HV.bin ExecutiveFile\LED_HV_V%datevar%%timevar%.bin2、可执行文件形式
原理 打开指定的源文件.c/.h等找到指定的定义软件版本号的字符通常是用宏定义定义的将指定的.bin、.hex文件拷贝到指定的目标文件夹并以上一步获取的软件版本号命名。 下面是实现代码 get_version_string_from_file(argv[1], Version); //根据main.c获得版本号printf(Version:%s\r\n, Version);copyFile(HEX_FILE, argv[2], argv[4]); //将Hex从Object拷贝到ExecutiveFile文件夹并获得新路径下的文件名copyFile(BIN_FILE, argv[3], argv[4]); //将Bin从Object拷贝到ExecutiveFile文件夹并获得新路径下的文件名//----------------------------------------------------------------------sTringStart strrchr(argv[2], \\) 1;sTringStop strchr(sTringStart, .);memcpy(SrcHexName, sTringStart, (sTringStop - sTringStart)); //得到原Hex/Bin文件名memcpy(SrcBinName, SrcHexName, sizeof(SrcHexName));sprintf(NewHexName, %s%s.hex, SrcHexName, Version); //拼接Version的Hex文件名sprintf(NewBinName, %s%s.bin, SrcBinName, Version); //拼接Version的Bin文件名//printf(New name: Hex:%s Bin:%s\r\n, NewHexName, NewBinName);get_file_dir(argv[4], HexFileDir); //得到ExecutiveFile文件夹的路径memcpy(BinFileDir, HexFileDir, sizeof(HexFileDir));strcat(HexFileDir, NewHexName); //拼接新的目标Hex文件路径strcat(BinFileDir, NewBinName); //拼接新的目标Bin文件路径printf(NewFile Dir: Hex:%s Bin:%s\r\n, HexFileDir, BinFileDir);//----------------------------------------------------------------------remove(HexFileDir);rename_res rename(NewDir_HexFileName, HexFileDir); //重新命名Hex printf(res %d,, rename_res);remove(BinFileDir);rename_res rename(NewDir_BinFileName, BinFileDir); //重新命名Binprintf(res %d\r\n, rename_res);然后在keil里面添加编译后执行.exe文件如下图 注本例子是把hex和bin文件都重新命名并存储到ExecutiveFile文件夹里。
其实还有更多功能可以做都可以通过可执行文件的方式去完成。