批处理多个文件合成一个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的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将2个非常相似的代码片段组合成一个函数并重复?

PIE-Basic 波段合成

网上的TS流视频文件下载,解密,合成一个文件的python方法(转的别人大佬的,自己存一份~~)

是否有在单个活动中处理多个片段的 Android 设计模式?

Glob观看多个文件,处理一个

requirejs - 将多个文件组合成一个不依赖于 requirejs 的 js 文件