前言

很多项目需要用到远程升级,那么就会有两个程序,bootloaderAPP工程,那么在发布和烧写时就会很麻烦,如果能够将两个文件合并,一次烧写就可以了。

一、Hex文件合并原理

boot.hexapp.hex的h文件合并,其实就是将boot.hex文件的最后一行删除,然后将app.hex文件复制到boot.hex文件的末尾就OK了。
可以直接使用记事本打开进行手动操作:
boot文件

  1. 将boot文件的最后一行:00000001FF删除
  2. 复制app文件粘贴到boot末尾

合并后文件

二、脚本操作

我们可以使用脚本来执行简单的自动化流程。因为电脑上安装了git,所以可以使用git bash来执行*.sh脚本文件。
下面参考鱼鹰大佬编写的脚本,修改为自己项目的文件,就可以测试使用了。

#!/bin/bash
#"D:\Program Files\Git\bin\sh.exe" --login -i -c "./boot_app.sh"  # MDK 中执行的命令
 
boot_file_hex=../BootLoader/Objects/zycm-c-boot.hex          #  BOOT 文件所在位置和名称
app_file_hex=../OBJ/zycm-c-app.hex           #dir_file_name_hex=`find ${app_dir_file_hex} -name "*.hex"`
boot_app_file_hex=./zycm-c-app_252.hex 
 
cp ${boot_file_hex}  ${boot_app_file_hex}     # 复制新文件 boot 文件
sed -i '$d' ${boot_app_file_hex}               # 删除最后一行
cat ${app_file_hex} >>  ${boot_app_file_hex} # 追加文件

将编写好的脚本放到工程目录下,然后配置keil在编译后运行这个脚本。
在这里插入图片描述
至此就完成了自动化生成合并后的烧写文件了。

三、boot是bin文件时与keil工程合并

本次碰到的情况是需要将bin文件与hex文件合并

3.1 手动方式,使用j-flash

  1. 导入boot.bin文件,另存为boot.hex文件
    在这里插入图片描述
  2. 将转换后的boot.hex导入j-flash,然后点击文件合成,选中app.hex文件。
  3. 将合并后的文件另存,即为合并后的烧写文件。
    在这里插入图片描述

3.2 shell脚本

3.1.1中生成的boot.hex文件,不能直接和keil生成的app.hex按照前文的脚本直接合并
有两点需要修改:

  1. 复制后的boot_app_file_hex无法追加文件:
    keil编译记录查了半天找不到原因,后面用git_bash直接执行脚本,提示没有权限,询问AI发现文件缺少写权限,添加权限即可追加文件
chmod +w ${boot_app_file_hex}
  1. 合并后的文件无法导入j-flash烧写:
    经过排查发现3.1.1中j-flash导出的boot.hex与keil编译生成的格式不兼容,最终使用srec_cat重新将boot.bin转换为intel格式的boot.hex,就可以使用脚本合并了。
srec_cat C:\Users\Administrator\Desktop\网关阀门井一体机__boot_110k.bin -binary -offset 0x0 -o C:\Users\Administrator\Desktop\网关阀门井一体机__boot_110k.hex -intel
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐