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

news2024/12/23 17:18:52

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.coloradmin.cn/o/1664099.html

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

相关文章

应用案例 | 商业电气承包商借助Softing NetXpert XG2节省网络验证时间

一家提供全方位服务的电气承包商通过使用Softing NetXpert XG2顺利完成了此次工作任务——简化了故障排查的同时,还在很大程度上减少了不必要的售后回访。 对已经安装好的光纤或铜缆以太网网络进行认证测试可能会面临不同的挑战,这具体取决于网络的规模、…

IDEA 好用的插件

图标插件:Atom Material Icons 此插件的作用就是更好的显示各种文件的类别,使之一目了然 汉化包 Chinese ​(Simplified)​ Language Pack / 中文语言包 作用就是 汉化 AI编码助手 GitHub Copilot AI编码助手:提示代码很好用 缺点&#xff1a…

发布GPT-5的方式可能会与以往不同;开源vocode使用 AI 自动拨打电话;开源gpt智能对话客服工具;AI自动写提示词

✨ 1: vocode 用AI通过声音与用户进行实时交流 Vocode是一个旨在帮助开发者快速构建基于声音的大型语言模型(LLM)应用程序的开源库。简单来说,如果你想要开发一个能够通过声音与用户进行实时交流的应用,比如电话机器人、语音助手…

暗区突围pc资格 暗区突围pc端测试资格获取

《暗区突围》的诞生,仿佛在游戏界投下了一枚深水炸弹,它不仅仅是射击游戏的新标杆,更是对玩家策略思维、生存直觉与团队协作能力的一次全面考验。在这个精心构建的虚拟战场中,每一次踏入暗区,都是对未知的探索&#xf…

Maven- Profile详解

前言 Profile能让你为一个特殊的环境自定义一个特殊的构建&#xff1b;profile使得不同环境间构建的可移植性成为可能。 <project><profiles><profile><build><defaultGoal>...</defaultGoal><finalName>...</finalName><…

【静态分析】软件分析课程实验A3-死代码检测

官网&#xff1a; 作业 3&#xff1a;死代码检测 | Tai-e 参考&#xff1a; https://www.cnblogs.com/gonghr/p/17981720 --------------------------------------------------------------------- 1 作业导览 为 Java 实现一个死代码&#xff08;dead code&#xff09;检…

Matten:视频生成与Mamba-Attention

Matten:视频生成与Mamba-Attention 摘要IntroductionRelated WorkMethodology Matten: Video Generation with Mamba-Attention 摘要 在本文中&#xff0c;作者介绍了Matten&#xff0c;一种具有Mamba-Attention架构的尖端潜在扩散模型&#xff0c;用于视频生成。在极小的计算…

数据结构(一)绪论

2024年5月11日 一稿 数据元素+数据项 逻辑结构 集合 线性结构 树形结构 </

商家转账到零钱开通揭秘,微信支付商户如何玩转分销返佣现金营销

在数字支付日益普及的今天&#xff0c;微信支付凭借其便捷、安全的特性&#xff0c;成为了众多商户的首选支付工具。而微信支付商户平台上的“商家转账到零钱”功能&#xff0c;更是为商户们打开了一扇全新的营销大门。今天&#xff0c;我们就来一起揭秘这个功能聊聊如何快速开…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.5讲 GPIO中断实验-通用中断驱动编写

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Android 几种系统升级方式详解

目录 ◆ 概述 ● 几种启动模式 ● MISC分区 ● CACHE分区 ● 几种系统升级方式 ◆ Recovery升级 ● 升级包构成&#xff0c;签名&#xff0c;制作 ● 升级脚本 ● 升级过程 ◆ OTA升级 ● 升级包构成&#xff0c;制作 ● 升级脚本 ● 升级过程 ◆ fastboot升级 ◆ ADB升级 几…

成为一名算法工程师需要掌握哪些技术栈

成为算法工程师需要学习的编程技能主要包括以下几个方面&#xff1a; Python&#xff1a;Python是算法工程师最常使用的编程语言之一。它拥有简洁易读的语法和丰富的库&#xff0c;如NumPy、Pandas、SciPy、Matplotlib等&#xff0c;这些库为数据处理、科学计算和可视化提供了…

C++的数据结构(二)

一、链表的基本概念 链表&#xff08;Linked List&#xff09;是一种物理存储单元上非连续的、非顺序的线性数据结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点&#xff08;链表中每一个元素称为节点&#xff09;组成&#xff0c;节点…

飞利浦|西圣开放式耳机怎么选?爆款机型深度对比!

现在&#xff0c;开放式耳机以其独特的非入耳设计&#xff0c;成为了市场上的新宠。开放式耳机在佩戴上不仅能让我们长时间享受舒适的体验&#xff0c;更告别了入耳式耳机会导致的耳闷头昏的烦恼。但是现在&#xff0c;面对市场上琳琅满目的品牌和型号&#xff0c;许多消费者感…

vue3属性透传(透传 Attributes),支持多个根节点,且可以在JavaScript 中访问透传 Attributes

支持多个根节点&#xff0c;且可以在JavaScript 中访问透传 Attributes Index.vue: <script setup> import { ref, onMounted } from vue import Child from ./Child.vue import ./index.cssconst handleClick () > {console.log(1) }onMounted(() > {}) </s…

静态IP设置:小白必看攻略

在现代网络环境中&#xff0c;IP地址是连接互联网的基石。它就像网络世界中的门牌号&#xff0c;让数据能够在庞大的网络海洋中准确找到目标。其中&#xff0c;静态IP地址由于其固定不变的特性&#xff0c;在某些特殊应用场景下尤为重要。那么&#xff0c;如何设置静态IP地址呢…

Ubuntu18.04设置SSH密钥登录

我们一般使用 VSCode 、MobaXterm、PuTTY等 SSH 客户端来远程管理 Linux 服务器。但是&#xff0c;一般的密码方式登录&#xff0c;容易有密码被暴力破解的问题。所以&#xff0c;一般我们会将 SSH 的端口设置为默认的 22 以外的端口&#xff0c;或者禁用 root 账户登录。但是即…

json-server 模拟接口服务

前端开发经常需要模拟接口请求&#xff0c;可以通过 json-server 实现。 1. 安装 json-server 在前端项目的终端命令行中执行 npm i json-server2. 创建数据源 在项目中新建文件 db.json &#xff0c;与 package.json 同级&#xff0c;内容为模拟的数据 注意 json 文件对格式…

40道 Nginx 高频面试题

Nginx 是一款轻量级的 Web 服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。那么关于 Nginx 的核心面试题有哪些呢&#xff1f;今天给大家整理了40道Nginx 高频面试题&#xff0c;最近…

Java 常见集合类

集合的整体框架 Java 的集合&#xff0c;也可以叫做容器&#xff0c;根据集合的整体框架可以看出&#xff0c;主要是两大集合接口&#xff1a;第一个是 Collection 接口&#xff0c;主要用来存放单一的元素对象&#xff1b;另一个是 Map 接口&#xff0c;主要用于存储键值对。…