关注+星标公众号,不错过精彩内容
mrszmpxaczf6409637426.jpg
作者 | strongerHuang微信公众号 | 嵌入式专栏
你们平时输出的Hex文件名,是如何定义的?特别是在产品需要量产时,发给生产部的Hex固件(文件名)。
如果软件版本升级了,发过去的Hex文件名还是一样,对方是不是要搞混?
但如果Hex文件名是通过【工程名+软件版本+日期时间】,类似下图这种,是不是就就不会出现搞混的情况了?
wnrncvojytf6409637526.png
本期为大家讲解:Keil定制Hex文件名实现的方法。
Keil定制Hex文件名实现的方法
Keil定制Hex文件名实现的方法有很多,这里为大家讲述其中一种,通过bat批处理实现的方法。
这里是本教程使用bat文件的内容:
@echo off
@rem 可执行文件(Hex)文件名set HEX_NAME=Demo
@REM 可执行文件(Hex)文件路径set HEX_PATH=.\Objects
@REM 定制Hex输出路径set OUTPUT_PATH=.\Output
@REM 软件版本文件路径set VERSION_FILE_PATH=..\App\main.c
@REM 软件版本字符串的格式set SOFTWARE_VERSION="#define SOFTWARE_VERSION"
@REM 获取系统日期和时间setYEAR=%DATE:~2,2%setMONTH=%DATE:~5,2%setDAY=%DATE:~8,2%setHOUR=%TIME:~0,2%setMINUTE=%TIME:~3,2%setSECOND=%TIME:~6,2%setCURRENT_DATE=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND%
@REM 获取软件版本for /f "tokens=3 delims= " %%i in ('findstr /C:%SOFTWARE_VERSION% %VERSION_FILE_PATH%') doset SW_Ver=%%iset SW_Ver=%SW_Ver:~1,-1%
@REM 定制Hex文件名set output_file_name=%HEX_NAME%_V%SW_Ver%_%CURRENT_DATE%
@REM 显示并复制Hex文件echo "Output hex file: %OUTPUT_PATH%\%output_file_name%.hex"copy %HEX_PATH%\%HEX_NAME%.hex %OUTPUT_PATH%\%output_file_name%.hex
exit提示:这里的内容可以根据自己项目情况进行修改,这里只是为了方便说明,整理的一个份简单的bat内容。
我们将这个bat文件放在工程的某个地方(目录)。比如,我们这里直接放在工程目录下:
sacxq5jhg5n6409637627.png
然后,在Keil的User选项,编译后那里添加这个bat批处理:
bvw0djzalde6409637727.gif
这样每次编译后,就可以生成带有【工程名+软件版本+日期时间】的Hex文件名了。(自动获取软件版本、日期时间,不用手动修改hex文件名)
详述bat批处理文件的内容
bat批处理文件我把它分为两块,上面一块是根据自己项目情况,需要进行修改。而下面部分可以不用修改。
pfmrgaqvroo6409637827.png
1、可执行文件(Hex)文件名、文件路径,是你 Keil 工程配置选项中,配置的内容。
@REM 可执行文件(Hex)文件名set HEX_NAME=Demo
@REM 可执行文件(Hex)文件路径set HEX_PATH=.\Objects
frfgyieznly6409637927.png
2、定制Hex输出路径,根据你自己情况,放在某个目录下,我们这里放在 工程下 Output 目录下。 @REM 定制Hex输出路径set OUTPUT_PATH=.\Output
ctr5nm3z2bm6409638027.png
3、软件版本号文件路径、字符串格式,也是根据你自己情况,放在某个源文件,根据自己定义的软件版本格式。 @REM 软件版本文件路径set VERSION_FILE_PATH=..\App\main.c
@REM 软件版本字符串的格式set SOFTWARE_VERSION="#define SOFTWARE_VERSION"
wa15rye0qnb6409638127.png
4、下半部分,可以不用修改,bat文件的语法很简单,看注释,应该比较容易理解。@REM 获取系统日期和时间setYEAR=%DATE:~2,2%setMONTH=%DATE:~5,2%setDAY=%DATE:~8,2%setHOUR=%TIME:~0,2%setMINUTE=%TIME:~3,2%setSECOND=%TIME:~6,2%setCURRENT_DATE=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND%
@REM 获取软件版本for /f "tokens=3 delims= " %%i in ('findstr /C:%SOFTWARE_VERSION% %VERSION_FILE_PATH%') doset SW_Ver=%%iset SW_Ver=%SW_Ver:~1,-1%
@REM 定制Hex文件名set output_file_name=%HEX_NAME%_V%SW_Ver%_%CURRENT_DATE%
@REM 显示并复制Hex文件echo "Output hex file: %OUTPUT_PATH%\%output_file_name%.hex"copy %HEX_PATH%\%HEX_NAME%.hex %OUTPUT_PATH%\%output_file_name%.hex
关于bat批处理文件的语法,这里就不解释其中语法的内容,大家可以自行百度了解。
最后额外说一下:这里主要针对Hex文件名,为了方便查找或追溯bug,最好在应用代码中,能通过某种方式(显示屏、串口输出等)获取当前软件的版本。
最最后,我录了一个视频,大家可以参考一下:
------------ END ------------
关注公众号后台回复『Keil』『单片机』『嵌入式工具』阅读更多相关文章。
回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。点击“阅读原文”查看更多分享。 |