基于KEIL 的合并boot.bin&app.bin的脚本文件

在设计一个项目或者系统时,一般为了此项目在正式运行阶段不需要拆机甚至不允许拆机的情况下,很有必要设计项目可以进行远程升级,
所以项目工程一般设计boot和app,让boot能够将app升级达到更新或者修复bug功能。

一开始需要烧录boot.bin,再升级app时经常需要编译生成app.bin文件作为升级的文件,但是在工厂烧录阶段一般使用一个bin文件烧录,
分两次烧录太麻烦,而每次都需要使用工具一步一步的升级,本文介绍一种编译自动生成的方法,默认读者已经了解新建工程和升级相关的
知识。

步骤:
1 具有boot&app的升级工程,其中在keil工程中可以将app和boot放在一个工作空间中以便查看工程代码和工程设置。

在这里插入图片描述

具体如下:
1)项目工程中包含app、boot工程。output文件夹为合并工具自动生成的。
在这里插入图片描述

  2)app的工程目录如下:主要涉及到obj文件夹,user文件夹,其他不是必须,根据项目裁剪。

在这里插入图片描述

  3)在E:\我的资料\appbootproject\APP\User中有合并工具MergeTool.bat,此文件工具为批处理文件,需要放在user文件夹中。

在这里插入图片描述

  4)obj文件夹中放置编译自动生成的工程bin文件,具体生成bin文件的方法可自行查询,本文在后面有提到(fromelf.exe --bin -o "$L@L.bin" "#L")生成。

在这里插入图片描述

  5) 为了统一工程的目录结构建议设计好app目录后复制一份作为boot的目录。boot的user和obj中也与上面app一样的结构。

2 在E:\我的资料\appbootproject\APP\User 中放置MergeTool.bat文件,并根据工程设置修改MergeTool.bat文件。打开此文件可
以看到一开始就有简单的使用步骤和输出的文件(output文件夹)目录。

在这里插入图片描述

在下面的BootFlashSize = 20中修改20,本文设计boot占用20Kbit所以此处为20,其他的修改读者可以在了解脚本文件后自行设置参数。

在这里插入图片描述

在第一个图将输出的bin文件修改成对应的工程output选项中的输出文件名,第二个图为app输出的名称,第三个图为boot的名称,第四个图为需要
输出的合成后的输出名称。
在这里插入图片描述

第一图
在这里插入图片描述

第二图app

在这里插入图片描述

第三图boot
在这里插入图片描述

第四图output

设置好后再在keil中设置编译时调用此工具(boot中不需要设置与此工具有关的操作,只需要生成的boot.bin放在boot的obj文件夹中),
下面的run#1为编译时生成bin文件的命令,run#2调用$PMergeTool.Bat命令。选择在编译成功后调用。

在这里插入图片描述

完成以上步骤后即可编译boot工程生成boot.bin,然后编译appg工程生成ap.bin文件,生成后自动调用工具进行合并。

在这里插入图片描述

在这里插入图片描述

出现 Merger success!合并并生成Bin文件成功 即合并成功。读者可以自行使用比对工具将原始的bin文件与合并后的bin文件进行比对校验是否成功合并。

如需要交流或者讨论的请与作者联系,微信号:tt824564795,请注明读者姓名在哪里看到的遇到的问题以便作者了解。

最后附上原始代码MergeTool.bat

:: 开/关显示cli信息
@echo off

echo ---------------------------------------------------------------
echo 合并bin工具MergeTool.Bat文件
echo 使用步骤:
echo 【1】 该文件需要放在APP的项目工程文件夹目录下。
echo 【2】 在keil的options选项的user中After Build里填写$PMergeTool.BAT并勾选Run#2。
echo 【3】 在MergeTool.Bat文件中修改app和boot的实际路径
echo 【4】 在MergeTool.Bat文件中填写具体的boot大小"BootFlashSize",单位Kb。
echo 【5】 如有需要可以编辑MergeTool.Bat文件,修改部分参数以适应工程需求。
echo Data: 2017-09-09
echo ---------------------------------------------------------------

::文件夹目录结构示意图:
::┆
::┞┈Project
:: └┈┈┈┈┈┈OutField
:: └┈┈┈┈┈┈DataField-01
:: ┝┈┈┈┈┈┈BootFirmwareField
:: ┝┈┈┈┈┈┈ServerFirmwareField
:: └┈┈┈┈┈┈MergeFirmwareField
:: └┈┈┈┈┈┈DataField-02
:: ┝┈┈┈┈┈┈BootFirmwareField
:: ┝┈┈┈┈┈┈ServerFirmwareField
:: └┈┈┈┈┈┈MergeFirmwareField

::<-----获取本.bat文件所在目录并截取上两级的目录----->
if %cd%%cd:~,3% echo 当前目录已经是%cd:~,1%盘的根目录!&goto end
cd…
set “ProjectPath0=%cd%”
cd…
set “ProjectPath=%cd%”
if “%ProjectPath%”
"%ProjectPath0%" (echo 上一级目录是: %cd:~,1%盘的根目录!)
:end
::echo Project目录: %ProjectPath%

echo 【一、 定义变量】
::<-----定义指定工程下的app和boot的.bin文件路径----->
set AppFile=%ProjectPath%\APP\OBJ\A8-App.bin
set BootFile=%ProjectPath%\Boot\OBJ\Bootloader.bin
set MergeName=Merge-V1.0.bin

::<-----定义BootFlashSiz指定Boot所占的文件大小----->
set /a BootFlashSize = 20

::<-----定义自动生成由时间组成的文件夹名称字段DataField,列:2020-11-23-11-31-28----->
set DataField=%date:0,4%-%date:5,2%-%date:8,2%-%time:0,2%-%time:3,2%-%time:6,2%

::<-----定义文件夹名称字段OutField=Output----->
set OutField=Output
set BootFirmwareField=Boot烧录固件
set ServerFirmwareField=服务器升级固件
set MergeFirmwareField=生产烧录固件

::<-----定义Merge为最终生成的生产固件字段----->
set MergeFile="%ProjectPath%%OutField%%DataField%%MergeFirmwareField%%MergeName%"

::<-----打印出AppFile、BootFile、MergeFile字段(调试使用)----->
:: echo %AppFile%
:: echo %BootFile%
:: echo %MergeFile%

echo 【二、 创建文件夹】
::<-----创建目标文件夹Output,包含创建服务器、生产、Boot所需的文件夹----->
if not exist %ProjectPath%%OutField% mkdir %ProjectPath%%OutField%
if not exist %ProjectPath%%OutField%%DataField% mkdir “%ProjectPath%%OutField%%DataField%”

mkdir “%ProjectPath%%OutField%%DataField%%ServerFirmwareField%”
mkdir “%ProjectPath%%OutField%%DataField%%MergeFirmwareField%”
mkdir “%ProjectPath%%OutField%%DataField%%BootFirmwareField%”

echo 【三、 复制文件】
::<-----将工程下的boot和app的bin文件分别复制到对应的文件夹----->
copy %AppFile% “%ProjectPath%%OutField%%DataField%%ServerFirmwareField%”
copy %BootFile% “%ProjectPath%%OutField%%DataField%%BootFirmwareField%”

::<-----准备boot文件 空bin文件撑开不需要写部分,size取决于app在flash起始地址之前的空间大小----->
set /a bootsize = %BootFlashSize%*1024
for %%a in (%BootFile%) do set /a size="%bootsize%"-%%~za
echo Boot文件大小:【%BootFlashSize% Kb】

fsutil file createnew temp.bin %size%

copy /b %BootFile% + temp.bin boot.bin

echo 【四、 合并文件】
::<-----生成合并文件----->
copy /b boot.bin + %AppFile% %MergeFile%

echo 【五、 删除临时文件】
::<-----删除临时文件----->
del temp.bin
del boot.bin

::<-----检查执行成功与否----->
if exist %MergeFile% (goto success) else goto failure

:success
echo ***************************************************
echo Merger success!合并并生成Bin文件成功
echo ***************************************************
::Pause
exit

:failure
echo ***************************************************
echo Merger failure!合并并生成Bin文件失败
echo ***************************************************
::Pause
exit

### 如何在微信中集成和使用 ChatGPT 或百度的文心一言服务 目前,官方并没有直接支持通过微信内置浏览器访问 ChatGPT 的网页版[^1]。然而,对于希望在微信环境中体验类似功能的用户来说,存在几种替代方案: #### 使用第三方小程序或公众号 一些开发者创建了专门的小程序或微信公众账号来间接接入这些AI服务平台。例如,“通义千问”已经上线了微信小程序版本,允许用户更便捷地其交互。 #### 浏览器内嵌方式 如果想要尝试像文心一言这样的国内产品,在微信内部打开其官方网站也是可行的方法之一。只需点击下方链接即可进入相应页面: - 文心一言:[https://yiyan.baidu.com/](https://yiyan.baidu.com/) 需要注意的是,由于网络环境的不同以及各平台政策的变化,具体可用性和稳定性可能会有所差异。建议定期关注目标平台最新公告获取最准确的信息。 ```python # 示例代码用于说明如何通过Python脚本调用API接口(仅作概念展示) import requests def get_response_from_api(prompt, api_url="http://example.com/api"): response = requests.post(api_url, json={"message": prompt}) return response.json() prompt_text = "你好" result = get_response_from_api(prompt_text) print(result['reply']) ``` 此段代码展示了理论上可以通过编程手段实现某些开放API对接的方式,但实际上要在微信生态里做到这一点还需要遵循特定的安全指引和技术文档指导[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值