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篇原创内容

公众号

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oracle 新_多种块大小的支持9i

oracle 新_多种块大小的支持 conn sys/sys as sysdba SHOW PARAMETER CACHE ALTER SYSTEM SET DB_CACHE_SIZE16M; ALTER SYSTEM SET DB_4K_CACHE_SIZE8M; CREATE TABLESPACE K4 DATAFILE F:\ORACLE\ORADATA\ZL9\K4.DBF SIZE 2M BLOCKSIZE 4K; CREATE TABLE SCOTT.A1 TABLESP…

国内有哪些知名的网络安全厂商?

首先就是360,这个我相信大家并不陌生了吧,你的电脑装过360么? 360在个人终端服务那是妥妥的扛把子,但是在企业服务里虽然有他们的身影却略显不足。 第二个就是深信服,网络安全的老牌大佬,业务覆盖了全球5…

java日历类概述

Java中的Calendar类位于java.util包下,它是一个抽象类,用于表示和管理日期及时间。Calendar类并不是直接实例化的,而是通过其提供的静态方法来获取实例。通常情况下,当你尝试创建一个Calendar实例时,实际上你得到的是G…

skywalking的使用

文章目录 介绍概念介绍探针agent后台服务 使用后台界面查询异常接口查看访问量 遇到的问题 介绍 官网 https://skywalking.apache.org/ 安装包下载 https://skyapm.github.io/document-cn-translation-of-skywalking/ 组成 Agent(探针):Ag…

MSP430环境搭建

1.下载ccs编译器 注意:安装路径和工作路径不能出现中文! 没有说明的步骤就点next即可! 1.1下载适合自己电脑的压缩包。 下载好压缩包后解压,点击有图标进行安装。 1.2创建一个文件夹用于安装编译器位置 选择安装地址&#xff0…

vue3实现el-table导出为excel表格(亲测可用)

✅ 作者 : 布克吉(微信公众号同名) 🍎简介 : 专注于前端开发,微信小程序,后台管理(VueReact) 本博客主要用于分享前端技术知识,更多内容请看下方👇 ✨人生态度 &#xff…

Android 简单的下拉选择框实现

要实现这种效果,目前知道的方法有以下两种,Spinner 和 ListPopupWindow,当然肯定还有很多别的方法,这里我们先尝试使用ListPopupWindow来实现这个效果; 以下是一个简单的demo: public class MainActivity extends AppCompatActivity {private List<String> dataList;pr…

【半夜学习MySQL】表结构的操作(含表的创建、修改、删除操作,及如何查看表结构)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 创建表查看表结构修改表删除表 创建表 语法&#xff1a; create table table_name(field1 datatype,field2 datatype,fiel…

hive日常使用时忘记部分补充(不定时)

1、date_formate、unix_timestamp、from_unixtime用法&#xff1a; 2、lag&#xff08;&#xff09;、lead()用法&#xff1a; lag&#xff08;)窗口函数返回分区中当前行之前行&#xff08;可以指定第几行&#xff09;的值。 如果没有行&#xff0c;则返回null。 lead()窗口…

dos命令改3389端口,通过dos命令更改3389端口的操作

要使用DOS命令更改3389端口&#xff0c;通常涉及修改Windows注册表中的相关键值。请注意&#xff0c;直接操作注册表具有一定的风险&#xff0c;因此在进行任何更改之前&#xff0c;请确保您了解正在进行的操作&#xff0c;并已经采取了适当的备份措施。 以下是一个基本的操作步…

2024年4月12日饿了么春招实习试题【第二题:魔法师】-题目+题解+在线评测【二分】

2024年4月12日饿了么春招实习试题【第二题:魔法师】-题目题解在线评测【二分】 题目描述&#xff1a;输入格式输出格式样例输入样例输出评测数据与规模 解题思路一&#xff1a;解题思路二&#xff1a;解题思路三&#xff1a;动态规划 题目描述&#xff1a; 塔子哥是一名魔法师…

浅谈运维数据安全

在数字化日益深入的今天&#xff0c;运维数据安全已经成为企业信息安全体系中的核心要素。运维工作涉及到企业信息系统的各个方面&#xff0c;从硬件维护到软件升级&#xff0c;从网络配置到数据备份&#xff0c;无一不需要严谨的数据安全保障措施。本文将从运维数据安全的重要…

抖音小店入驻后,完成这个步骤,出单几率会大大提升

哈喽~我是电商月月 抖音小店的运营过程中&#xff0c;最重要的就是选品&#xff0c;好品自带流量 但在商品正式上架前一定要做好这些设置的基础搭建&#xff0c;这些工作没做好&#xff0c;商品再好&#xff0c;我们的店铺也是不会有大流量和曝光的 那到底是哪些设置&#x…

iOS性能指标和性能测试工具

一&#xff1a; iOS性能测试指标 作为一名软件测试工程师&#xff0c;在测试 iOS 应用的性能时&#xff0c;需要关注以下几个方面&#xff1a; 1. 响应时间&#xff1a;应用的启动时间、页面加载速度、接口响应时间等。 2. CPU 使用率&#xff1a;应用在各种操作下的 CPU 占…

基于Qt的Model-View显示树形数据

目标 用qt的模型-视图框架实现树型层次节点的显示&#xff0c;从QAbstractItemModel派生自己的模型类MyTreeItemModel&#xff0c;用boost::property_tree::ptree操作树型数据结构&#xff0c;为了演示&#xff0c;此处只实现了个只读的模型 MyTreeItemModel的定义 #pragma o…

设计模式-创建型-原型模式-prototype

工作经验类 public class WorkExperience implements Cloneable {private String workDate;private String company;public void setWorkDate(String workDate) {this.workDate workDate;}public void setCompany(String company) {this.company company;}Overridepublic Ob…

品鉴中的个人风格:如何形成自己与众不同的红酒品鉴体验

品鉴云仓酒庄雷盛红酒不仅是一种感官体验&#xff0c;更是一种个人风格的展现。每个人都有自己与众不同的品味和偏好&#xff0c;通过品鉴红酒&#xff0c;我们可以形成自己与众不同的红酒品鉴体验。 要形成自己与众不同的红酒品鉴体验&#xff0c;首先需要勇于尝试不同类型的红…

返回分类信息(带层级)

文章目录 1.前端展示分类管理信息1.目前项目架构2.启动前后端项目1.启动mysql容器2.启动后端 renren-fast3.启动前端1.界面2.用户名密码都是admin 3.创建分类管理菜单1.菜单管理 -> 新增 -> 新增目录2.刷新3.能够新增菜单的原因是前端脚手架与renren-fast后端脚手架通信&…

Python大数据分析——Logistic回归模型

Logistic回归模型 概念理论分析模型评估混淆矩阵ROC曲线KS曲线 函数示例 概念 之前的回归的变量是连续的数值变量&#xff1b;而Logistics回归是二元离散值&#xff0c;用来解决二分类问题。 理论分析 上式中的hβ(X)也被称为Loqistic回归模型&#xff0c;它是将线性回归模型…

LagentAgentLego智能体工具使用

1. lagent 参考文档 https://github.com/InternLM/Tutorial/blob/camp2/agent/lagent.md 使用 LMDeploy 部署 conda activate agent lmdeploy serve api_server /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b \--server-name 127.0.0.1 \--model-name in…