ok_Keil实用小技巧 | Keil定制Hex文件名实现的方法

Keil实用小技巧 | Keil定制Hex文件名实现的方法

@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 获取系统日期和时间
set YEAR=%DATE:~2,2%
set MONTH=%DATE:~5,2%
set DAY=%DATE:~8,2%
set HOUR=%TIME:~0,2%
set MINUTE=%TIME:~3,2%
set SECOND=%TIME:~6,2%
set CURRENT_DATE=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND%

@REM 获取软件版本
for /f "tokens=3 delims= " %%i in ('findstr /C:%SOFTWARE_VERSION% %VERSION_FILE_PATH%') do set SW_Ver=%%i
set 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

原创 strongerHuang 嵌入式专栏 2024-05-10 11:45 四川

关注+星标公众,不错过精彩内容

图片

作者 | strongerHuang

微信公众号 | 嵌入式专栏

你们平时输出的Hex文件名,是如何定义的?特别是在产品需要量产时,发给生产部的Hex固件(文件名)。

如果软件版本升级了,发过去的Hex文件名还是一样,对方是不是要搞混?

但如果Hex文件名是通过【工程名+软件版本+日期时间】,类似下图这种,是不是就就不会出现搞混的情况了?

图片

本期为大家讲解: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 获取系统日期和时间set YEAR=%DATE:~2,2%set MONTH=%DATE:~5,2%set DAY=%DATE:~8,2%set HOUR=%TIME:~0,2%set MINUTE=%TIME:~3,2%set SECOND=%TIME:~6,2%set CURRENT_DATE=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND%
@REM 获取软件版本for /f "tokens=3 delims= " %%i in ('findstr /C:%SOFTWARE_VERSION% %VERSION_FILE_PATH%') do set 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文件放在工程的某个地方(目录)。比如,我们这里直接放在工程目录下:

图片

然后,在Keil的User选项,编译后那里添加这个bat批处理:

图片

这样每次编译后,就可以生成带有【工程名+软件版本+日期时间】的Hex文件名了。(自动获取软件版本、日期时间,不用手动修改hex文件名)

详述bat批处理文件的内容

bat批处理文件我把它分为两块,上面一块是根据自己项目情况,需要进行修改。而下面部分可以不用修改。

图片

1、可执行文件(Hex)文件名、文件路径,是你 Keil 工程配置选项中,配置的内容。

@REM 可执行文件(Hex)文件名set HEX_NAME=Demo
@REM 可执行文件(Hex)文件路径set HEX_PATH=.\Objects

图片

2、定制Hex输出路径,根据你自己情况,放在某个目录下,我们这里放在 工程下 Output 目录下。 

@REM 定制Hex输出路径set OUTPUT_PATH=.\Output

图片

3、软件版本号文件路径、字符串格式,也是根据你自己情况,放在某个源文件,根据自己定义的软件版本格式。 

@REM 软件版本文件路径set VERSION_FILE_PATH=..\App\main.c
@REM 软件版本字符串的格式set SOFTWARE_VERSION="#define SOFTWARE_VERSION"

图片

4、下半部分,可以不用修改,bat文件的语法很简单,看注释,应该比较容易理解。

@REM 获取系统日期和时间set YEAR=%DATE:~2,2%set MONTH=%DATE:~5,2%set DAY=%DATE:~8,2%set HOUR=%TIME:~0,2%set MINUTE=%TIME:~3,2%set SECOND=%TIME:~6,2%set CURRENT_DATE=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND%
@REM 获取软件版本for /f "tokens=3 delims= " %%i in ('findstr /C:%SOFTWARE_VERSION% %VERSION_FILE_PATH%') do set 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,最好在应用代码中,能通过某种方式(显示屏、串口输出等)获取当前软件的版本。

最最后,我录了一个视频,大家可以参考一下:

strongerHuang

,赞166

------------ END ------------

关注公众号后台回复『Keil』『单片机』『嵌入式工具』相关文章。

回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

strongerHuang

作者黄工,高级嵌入式软件工程师,分享嵌入式软硬件、AIoT(物联网+人工智能)、单片机、通信技术、开发工具、半导体、芯片、电子、行业资讯等相关内容(关注并回复【1024】查看更多内容)。

521篇原创内容

公众号

嵌入式专栏

作者黄工【strongerHuang】,专注分享嵌入式软件、硬件、工具等相关内容,通过专栏形式精选并整理更多嵌入式相关教程。关注并回复“1024”查看更多教程。

213篇原创内容

公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型微调之 在亚马逊AWS上实战LlaMA案例(八)

大模型微调之 在亚马逊AWS上实战LlaMA案例(八) 微调技术 Llama 等语言模型的大小超过 10 GB 甚至 100 GB。微调如此大的模型需要具有非常高的 CUDA 内存的实例。此外,由于模型的大小,训练这些模型可能会非常慢。因此&#xff0c…

element 输入框禁止输入空格以及复制的值进去删除空格(vue自定义指令)开箱即用

实例图: 代码: //输入框禁止输入空格 Vue.directive(noSpace, {bind(el) {//禁止输入空格el.addEventListener("keydown", function (event) {if (event.keyCode 32) {event.preventDefault();}});//复制值时去掉空格el.addEventListener(&q…

node——使用localtunnel做内网穿透

前言 内网穿透是一种允许外网用户访问内网主机的技术。 将您的本地主机公开到世界各地,使之能访问,无需混淆DNS或部署。 内网穿透技术通常涉及以下几个关键步骤: 使用公网服务器或NAT(网络地址转换)设备:这…

「51媒体」邀请媒体参会报道和媒体发稿有啥不同

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体参会报道和媒体发稿是新闻报道的两种不同形式,它们的主要区别在于内容来源、报道方式和目的。 内容来源: 媒体参会报道:通常指的是记者或媒体代…

火绒安全原理、用法、案例和注意事项

火绒安全是一款功能强大的安全软件,它采用了先进的安全技术和算法,通过实时监测、恶意代码识别、防火墙功能、沙箱技术和网络保护等多种手段,为用户提供全面的计算机安全防护。 1.为什么选用火绒安全? 火绒安全是一款优秀的安全软…

2024年第九届数维杯大学生数学建模挑战赛B 题思路1.0版本

B题:生物质和煤共热解问题的研究 数维杯分享资料(问题一代码论文思路)链接(18点更新): 链接:https://pan.baidu.com/s/1GSv9dkqcY6G-XUnd0sJe_A 提取码:sxjm 题目分析&#xff1…

4G,5G执法记录仪人脸识别、人脸比对使用说明

4G/5G执法记录仪或4G/5G智能安全帽,做前端人脸识别、人脸比对,采用了上市公司的成熟的人脸识别算法,需要支付LICENSE给算法公司,理论上前端设备支持30K的人脸库(受设备运行内存限制)。 4G/5G执法记录仪侧要…

【Spring源码分析】ResolvableType

【Spring源码分析】ResolvableType 参考 目录 文章目录 【Spring源码分析】ResolvableType一、ParameterizedType 参数化类型&#xff0c;即泛型&#xff1b;例如&#xff1a;List< T>、Map< K,V>等带有参数化的对象;二、GenericArrayType—— 泛型数组 泛型数组…

Flink container exit 143 问题排查

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

一站式PDF解决方案:如何部署自己的PDF全能工具(Docker部署和群晖部署教程)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 开始部署 📒📝 Docker部署📝 群晖部署📝 本地安装⚓️ 相关链接 ⚓️📖 介绍 📖 在数字化办公的今天,PDF文件几乎成了我们日常工作中不可或缺的一部分。但你是否曾因为PDF文件的编辑、转换、合并等问题而头疼?如果…

对称二叉树

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;falses 思路&#xff1a;我刚开始是想着用…

【35分钟掌握金融风控策略21】贷前额度策略

目录 贷前策略审批流程和统一额度管理 贷前策略审批流程 统一额度管理 预授信策略 贷前策略审批流程和统一额度管理 贷前包含了多个风控场景&#xff0c;这些风控场景的策略在执行时是否存在先后顺序呢&#xff1f;在贷前&#xff0c;除上述主要的风控场景&#xff0c;还有…

使用Selenium破解滑动验证码的原理及解决思路

1、获取页面元素信息&#xff1a; 使用Selenium打开目标网页&#xff0c;并通过相关方法获取滑块、背景图等元素的位置和属性信息。可以使用Selenium提供的定位方法&#xff08;如xpath、CSS选择器等&#xff09;来找到这些元素。 可以使用find_element_by_xpath或find_elemen…

基于STC12C5A60S2系列1T 8051单片机实现一主单片机给一从单片机发送数据的串口通信功能

基于STC12C5A60S2系列1T 8051单片机实现一主单片机给一从单片机发送数据的串口通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存…

二叉树的非递归遍历(c++)

前序 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-tree-preorder-traversal/description/ 1---2---4---5--…

GEE数据集——高分辨率全球树冠高度地图(1 米)Meta 公司

高分辨率 1 米全球树冠高度地图 简介 全球树冠高度地图数据集提供了对全球树冠高度的全面了解,有助于对森林生态系统、碳固存和气候变化减缓工作进行精确监测。该数据集由 Meta 和世界资源研究所合作开发,是了解森林结构和动态的基石。通过融合最先进的卫星图像和先进的人工…

Go实现树莓派读取at24c02 eeprom读写数据

步骤 启用i2c 参考 Go实现树莓派读取bh1750光照强度 代码 package mainimport ("fmt""periph.io/x/conn/v3/i2c" )type AT24C02Device struct {dev *i2c.Dev }func NewAT24C02Device(addr uint16, bus i2c.BusCloser) (*AT24C02Device, error) {var (d…

千亿美元《人工智能》超级计算机!

微软与OpenAI的合作将引领人工智能领域的巨大飞跃。他们共同打造的百亿美元人工智能超级计算机项目将推动技术的边界&#xff0c;为未来科技发展开辟全新的可能性。这一合作不仅体现了科技巨头之间的紧密合作&#xff0c;也展现了人工智能在全球范围内的战略重要性。 微软和 O…

截图文字怎么识别?这里有三种识别方法

截图文字怎么识别&#xff1f;在数字化时代&#xff0c;信息的快速处理和转换成为了提高工作效率的关键。截图文字识别技术&#xff0c;作为连接视觉信息与数字文本的桥梁&#xff0c;极大地便利了我们的工作和生活。它允许用户从图像中提取文字内容&#xff0c;进而编辑、搜索…

luceda ipkiss教程 71:统计线路中器件的个数

**案例分享&#xff1a;**统计线路中某一器件的个数 如&#xff0c;统计SplitterTree中mmi的个数&#xff1a; 所有代码如下&#xff1a; # Copyright (C) 2020 Luceda Photonicsfrom si_fab import all as pdk from ipkiss3 import all as i3class GeneralizedSplitterTree…