当前位置: 首页 > article >正文

Keil自动生成Bin文件(2)

情况:之前写过一篇Keil在编译的时候自动生成Bin文件。但是后来在发固件的时候发现了一些小问题。固件需要版本号和时间,生成的固件名每次都需要自己手动修改,增加了很多繁琐的工作量。因此研究写出一个Batch脚本来解决这个问题。


首先提取一下今天的日期

@REM 提取日期
set datevar=%date:~0,4%.%date:~5,2%.%date:~8,2%

 根据自己的文件名,文件路径,存放软件版本号的文件和变量名

@REM 可执行文件(exe)文件名 (要改)
set EXE_NAME=SoftWare
 
@REM 可执行文件(exe)文件路径 (根据自己看需不需要改)
set EXE_PATH=.\Objects

@REM Bin文件输出路径 (根据自己看需不需要改)
set OUTPUT_PATH=..\Output

@REM 软件版本文件路径 (根据自己看需不需要改)
set VERSION_FILE_PATH=..\User\user_sys.h

@REM 软件版本字符串的格式 (要改)
set SOFTWARE_VERSION="SOFTWARE_VERSION"

@REM fromelf文件路径 (查看一下keil软件放在什么目录,根据目录来)
Set FROMELF_PATH=C:\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe

 之后就是获取版本软件号,然后转化为自己需要的格式

打个比方:软件版本号为0x1011,第一位为大版本号1,第二位为中版本号0,第三位-第四位为小版本号11,因为是16进制,所以要转换成10进制数,转换后为 1.0.17

@REM 获取软件版本号
for /f "tokens=3 delims= " %%i in ('type "%VERSION_FILE_PATH%" ^| findstr "%SOFTWARE_VERSION%"') do set SW_Ver=%%i 

@REM 显示原始版本号
echo Original version in hex: %SW_Ver%

@REM 提取大版本号
set "major=!SW_Ver:~2,1!"

@REM 提取中间版本号
set "middle=!SW_Ver:~3,1!"

@REM 提取小版本号
set "minor=!SW_Ver:~4,2!"

@REM 将小版本号从16进制转换为10进制
set /a "minor_dec=(!minor:~0,1!*16)+!minor:~1,1!"

@REM 整合软甲版本号
set Version=%major%.%middle%.%minor_dec%
:: 显示转换后的版本号
echo %Version%

 最后,将版本名和时间拼接,并且转换成bin文件。这样就可以在输出文件夹得到我们想要的bin文件。

@REM 定制Hex文件名
set output_file_name=%EXE_NAME%_V!Version!_%datevar%

@REM 转换并定制Bin文件名
%FROMELF_PATH% --bin "%EXE_PATH%\%EXE_NAME%.axf" --output "%OUTPUT_PATH%\%output_file_name%.bin"

 最后附上完整的代码

@echo off

setlocal EnableDelayedExpansion

@REM 提取日期
set datevar=%date:~0,4%.%date:~5,2%.%date:~8,2%

@REM 可执行文件(exe)文件名 (要改)
set EXE_NAME=SolarFlow
 
@REM 可执行文件(exe)文件路径 (根据自己看需不需要改)
set EXE_PATH=.\Objects

@REM Bin文件输出路径 (根据自己看需不需要改)
set OUTPUT_PATH=..\Output

@REM 软件版本文件路径 (根据自己看需不需要改)
set VERSION_FILE_PATH=..\User\user_sys.h

@REM 软件版本字符串的格式 (要改)
set SOFTWARE_VERSION="SBV_SOFTWARE_VERSION"

@REM fromelf文件路径 (查看一下keil软件放在什么目录,根据目录来)
Set FROMELF_PATH=C:\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe

@REM 获取软件版本号
for /f "tokens=3 delims= " %%i in ('type "%VERSION_FILE_PATH%" ^| findstr "%SOFTWARE_VERSION%"') do set SW_Ver=%%i 

@REM 显示原始版本号
echo Original version in hex: %SW_Ver%

@REM 提取大版本号
set "major=!SW_Ver:~2,1!"

@REM 提取中间版本号
set "middle=!SW_Ver:~3,1!"

@REM 提取小版本号
set "minor=!SW_Ver:~4,2!"

@REM 将小版本号从16进制转换为10进制
set /a "minor_dec=(!minor:~0,1!*16)+!minor:~1,1!"

@REM 整合软甲版本号
set Version=%major%.%middle%.%minor_dec%
:: 显示转换后的版本号
echo %Version%

@REM 定制Hex文件名
set output_file_name=%EXE_NAME%_V!Version!_%datevar%

@REM 转换并定制Bin文件名
%FROMELF_PATH% --bin "%EXE_PATH%\%EXE_NAME%.axf" --output "%OUTPUT_PATH%\%output_file_name%.bin"

@REM 显示输出的文件
echo "Output bin file: %OUTPUT_PATH%\%output_file_name%.bin"

endlocal
::pause
exit

 


http://www.kler.cn/a/513623.html

相关文章:

  • 数据结构-ArrayList和顺序表
  • AUTOSAR OS模块详解(三) Alarm
  • win32汇编环境,对多行编辑框添加或删除文本
  • StarRocks强大的实时数据分析
  • Linux TCP 之 RTT 采集与 RTO 计算
  • 机器学习-核函数(Kernel Function)
  • 2024年度个人成长与技术洞察总结
  • Data Filtering Network 论文阅读和理解
  • C++ 智能指针(八股总结)
  • 【组件库】使用Vue2+AntV X6+ElementUI 实现拖拽配置自定义vue节点
  • Springboot sse 示例
  • (done) 并行计算学习 (Day1: 两个简单的 OpenMP 例子)
  • JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码
  • 【C++】揭秘类与对象的内在机制(核心卷之深浅拷贝与拷贝构造函数的奥秘)
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和
  • Python 进阶 - Excel 基本操作
  • 智能系统的感知和决策
  • 第15篇:从入门到精通:Python标准库详解
  • LeetCode 热题 100_全排列(55_46_中等_C++)(递归(回溯))
  • 简识JVM私有内存区域栈、数据结构
  • 蓝桥杯R格式--高精度算法模拟
  • 【MySQL】 常见数据类型
  • 10倍数据交付提升 | 通过逻辑数据仓库和数据编织高效管理和利用大数据
  • C#程序关闭时保证所有线程结束的方法
  • elasticsearch 数据导出/导入
  • 【记录】记录项目中的问题