批处理多个文件合成一个HEX
Posted 无痕幽雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批处理多个文件合成一个HEX相关的知识,希望对你有一定的参考价值。
由于项目里面包含boot程序区,boot数据区,APP程序区,APP数据区,如下如所示
因此成产发行时候需要把多个文件合成一个hex下载。
通过百度有如下几种方案:
1、通过J-Falsh工具,把多个Bin文件合成一个hex(具体操作方法,请自行百度);
2、通过批处理工具(用到fsutil.exe、cat.exe和hbin.exe)把多个Bin文件合成一个Bin文件,再转换成一个hex,请参考:bin文件合并工具(UBIN)使用方法_u012572552的博客-CSDN博客;
3、通过批处理工具(srec_cat.exe)把多个Hex合成一个hex文件,请参考:STM32批处理多个hex文件合并,再通过STM32CubeProg同时下载。
通过本人实际操作,选择了方案3,采用SRecord工具(链接: 百度网盘 请输入提取码 提取码: ux8q)实现了功能。
至于为什么选择方案3,是因为方案2合成Bin文件时候,需要计算偏移量,我嫌麻烦,纯属个人偏好,大家自行选择;方案1太繁琐,万一地址输错,文件就错了,每次生成hex还得验证下。
操作步骤:
一、根据APP程序生成BOOT参数区:
由于BOOT程序是根据BOOT参数区去校验APP程序区,判断APP程序区是否有程序,是否跳转。因此我写了一个小工具,根据app.bin文件,成产BootConfig.bin文件。各位根据自己自己实际项目需求,决定是否生产BootConfig文件和文件格式。
二、把BIN文件成产HEX文件
@echo off
@Rem COPYRIGHT (C)2020 LIUDULAB, Inc., All Rights Reserved
@Rem Author: farmer00
@Rem Version: 1.0
@Rem Date: 4-14-2020
@Rem Convert Bin file to Hex File
set varRootPath=%cd%
set varCatToolPath=%varRootPath%\\tool\\srec_cat.exe
set varCmpToolPath=%varRootPath%\\tool\\srec_cmp.exe
set varInfoToolPath=%varRootPath%\\tool\\srec_info.exe
set varSrcFile=%varRootPath%\\src\\test.bin
set varOutFile=%varRootPath%\\output\\test.hex
set varOffset=0x10000
@Rem print srec_cat version
echo ------------------------------------------------------------------
%varCatToolPath% -VERSion
echo ------------------------------------------------------------------
@Rem Bin--->Hex
Rem %varCatToolPath% %varSrcFile% -binary -offset %varOffset% -o -hex-dump
%varCatToolPath% %varSrcFile% -binary -offset %varOffset% -o %varOutFile% -intel
echo Bin File had been convert to Hex file!
pause
三、把几个HEX合成一个HEX
set varSrcFile21=%varRootPath%\\src\\123.hex
set varSrcFile22=%varRootPath%\\src\\345.hex
set varSrcFile23=%varRootPath%\\src\\567.hex
set varOutFile21=%varRootPath%\\output\\789_%year%%month%%day%.hex
@Rem Hex--->Hex
%varCatToolPath% %varSrcFile21% -intel %varSrcFile22% -intel %varSrcFile23% -intel -o %varOutFile21% -intel
其中获得当前时间:
set "year=%date:~0,4%"
set "month=%date:~5,2%"
set "day=%date:~8,2%"
set "hour_ten=%time:~0,1%"
set "hour_one=%time:~1,1%"
set "minute=%time:~3,2%"
set "second=%time:~6,2%"
删除一些中间文件:
del %varSrcFile% /s
del %varOutFile% /s
del %varOutFile11% /s
<----------------------------------------------------2021.10.13--------------------------------------------------------->
昨天通过批处理程序调用SRecord工具实现了bin文件转HEX,HEX文件合并为一个生产发行文件,但是这里面存在一个“烦人的步骤”,需要用我自己开发的MFC工具根据APP生成bootConfig.bin文件,然后才能通过批处理进行合并。对于追求完美的人来说,这点不可忍受,那怎么解决呢?
最开始我在想能不能把MFC里面的功能移植到批处理里面,于是查看批处理语法,怎么定义函数,怎么调用函数等等,发现困难太大;于是我转变思路,既然有SRecord工具,那我能不能开发一个类似的工具,实现我要的功能,于是查找win32控制台程序资料,请看:如何用VS2010新建一个Win32控制台应用程序项目,被我找到了,看了下,把MFC功能移植到Win32控制台程序,太简单了。
怎么LOG打印?请看:在Win32应用程序中使用Console控制台输出信息(原)
怎么调用win32控制台程序传入参数?请看:_tmain(int argc, _TCHAR* ARGV[])下命令行参数用法
这里需要说明的是:
1)argc这个参数不需要手工传入,系统会自动传入;argc用来统计参数的个数,因为路径为默认 的参数,所以argc至少为1
2)argv[0]表示输入程序的路径及名称,即当你写入工具完整路径名称,既是调用工具,又是作为 第一个参数输入;
3)argv[1],argv[2]...表示自己输入的参数。
以上是关于批处理多个文件合成一个HEX的主要内容,如果未能解决你的问题,请参考以下文章
网上的TS流视频文件下载,解密,合成一个文件的python方法(转的别人大佬的,自己存一份~~)