首页 > 其他分享 >如何将keil5中的bin文件合并

如何将keil5中的bin文件合并

时间:2024-06-18 09:02:03浏览次数:13  
标签:bin 文件 起始 合并 单片机 地址 keil5 out

前言

       最近有个需求,需要把单片机中的两个bin文件合并成一个bin文件,方便板子在生产烧录代码阶段可以节约烧录次数,这两个文件一般指的是BOOT+APP文件,bin文件里面没带有地址信息,但是在单片机中的烧录文件需要定位起始地址,所以就需要特别注意它们的偏移地址。因为可能会涉及到进制的转换,用了好几个工具都以失败告终,然后就总结两个简单的方法,哈哈。

两种方法

        为了避免无硬件在手的情况,两种方法分别是有单片机和无单片机的情况下实现。
        下图中main.c是存放脚本代码的文件,binMerge.exe是main.c运行后的执行文件,out_boot.bin是第一个文件,设起始地址为0x00,out_app.bin是第二个文件,设起始地址为0x4000,out.bin为两个bin合并文件。

一、有硬件

        该方法需要单片机和jflash+ARM仿真器配合,以n32单片机为例。

过程:把两个bin文件导进单片机,然后再一起导出来一整个bin文件。

1、点击jflash.exe进入软件,创建自己的项目或者打开已有项目

2、导入out_boot.bin,注意设置该文件的单片机起始地址和查看该bin文件的起始地址

3、分别点击连接单片机,连接成功后,点击产品编程

4、导入out_app.bin,设置该文件的单片机起始地址和查看该bin文件的起始地址

5、导入全部的bin文件后,点击手动编程,读出整片数据,然后点击保存就可以得到合成后的bin文件

二、无硬件

        无硬件的方法需要用到一个脚本代码,这个代码用到网上的一个开源代码,涉及到C语言的一些文件管理,表示看不懂,感兴趣的可以去阅读一下源码,也可以拿来直接用。        

执行步骤:

1、WIN+R输入cmd进入Windows命令框。

2、cd Desktop\bin_C 回车进入自己创建的C文件夹

3、gcc main.c -o binMergeb编译可执行文件

4、.\binMerge.exe out_boot.bin out_app.bin 0x00 0x4000 out.bin

命令行执行结果:执行binMerge.exe之后会显示各个bin文件的起始地址

验证:可以看到,在0x00地址显示的是out_boot起始地址,在0x4000地址显示的是out_app.bin的起始地址,中间用0xFF填充,,如果需要修改填充值为0x00,可以到main.c函数中修改下面的宏。

#define FILL    (uint8_t)0xff     //空白地址填充值

总结

        本次使用的两种方法感觉还是不够灵活,不能在keil5里面一起实现,但好歹也是自己找了一下午的方法,据说也可以通过winhex工具来实现,但是我没成功,方法千万种,学海无涯,以后再来探索了。

引用

1、可通过下载winhex或者jflash查看bin文件数据是否正确
官方下载地址:http://www.x-ways.net/winhex/index-m.html

2、Gitee资源下载链接(引用他人):https://gitee.com/sharkisyou/bin-merge.git

3、Gitee资源下载链接(本人):https://gitee.com/huang_ze_rong/bin-merge_-c.git

标签:bin,文件,起始,合并,单片机,地址,keil5,out
From: https://blog.csdn.net/weixin_49030685/article/details/139690459

相关文章

  • React中AntDesign upload组件 自定义请求将多个上传请求合并成一个并
    接口文档核心代码constImportPictureUpload=()=>{const[fileList,setFileList]=useState([])constonBeforeUpload=(file:any,fileList:any)=>{setFileList(fileList)returnfalse;}useEffect(()=>{if(......
  • P10602 [CEOI 2009] Harbingers 题解
    小清新数据结构优化dp。思路考虑基本的dp式。\[\begin{aligned}f_{x}&=w_{x}+\max_{i是x的祖先}v_{x}\times(dep_{x}-dep_{i})+f_i\\&=w_{x}+v_{x}\timesdep_{x}+\max_{i是x的祖先}-dep_{i}\timesv_{x}+f_i\end{aligned}\]发现\(-dep_{i}\timesv_{x}+f_i\)是......
  • 【Git入门和实战】第2课:git中的专有名词和概念解释:仓库、工作目录、暂存区、远程仓库
    本文是git入门到实战系列文章的第2课,主要讲解git中的专有名词和概念,主要有仓库(repository)、工作目录(WorkingDirectory)、暂存区(Stage/Index)、远程仓库(remote)、、提交(commit)、HEAD指针、文件状态、分支(branch)、合并(merge)、标签(tag)、引用(ref)。(文末附练习题,......
  • 【JAVA开发笔记】实战演练,如何用EasyExcel导出表格,并且自定义合并单元格
    目录1.前言2.EasyExcel简介3.EasyExcel简单导出案例讲解3.1EasyExcel依赖引入3.2测试类创建3.3Excel导出实现4.EasyExcel合并单元案例讲解4.1实现自定义合并策略4.2 使用自定义合并策略5.总结1.前言项目上,需将一个列表数据导出Excel表格,并将指定列相同......
  • WPF Path GeometryCombineMode Union, Exclude,Intersect,Xor
    union<Windowx:Class="WpfApp172.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mi......
  • MySQL 5.7贴心参数之binlog_row_image=full
    相信大家都了解mysqlbinlog的格式,那就是有三种,分别是STATEMENT,MiXED,ROW。各有优劣,具体的请大家自行查阅资料。在MySQL5.7版本以前,虽然ROW格式有各种各样的好处。1.比如加快从库重放日志;ROW直接调用mysql的存储引擎接口(handlerAPI)来执行行的插入、删除和更新,完全跳......
  • BinDiff
    BinDiffBinDiff可以结合IDAPro、BinaryNinja、Ghidra比较两个可执行程序的流程差异,可用于版本功能比较或补丁分析。2011年被google收购后转为免费工具。2023年在github开源。官方简介:https://www.zynamics.com/bindiff.htmlgithub地址:https://github.com/google/bindif......
  • Miller Rabin算法判定质数(OI向)
    前言:本篇不太适合那些对数学证明要求严格的Oier,然后本人也是蒟蒻,主要写给自己回顾用的MillerRabin算法能快速的判断一个数是否为质数,作为一个数学算法它具有一定的玄学成分,但是在OI中通过一些手段可以使其达到100%正确。先让我们对比一下一般算法书教的2种关于质......
  • element-plus el-table spanMethod 行合并通用方法 可实现数据的自动整理
    importtype{TableColumnCtx}from'element-plus'interfaceSpanMethodProps<T>{row:T&Record<string,any>column:TableColumnCtx<T>rowIndex:numbercolumnIndex:number}/***el-table行合并方法*@par......
  • 代码随想录算法训练营第第37天 | 56. 合并区间 、738.单调递增的数字、968.监控二叉
    合并区间本题也是重叠区间问题,如果昨天三道都吸收的话,本题就容易理解了。https://programmercarl.com/0056.合并区间.html能做出来/***@param{number[][]}intervals*@return{number[][]}*/varmerge=function(intervals){intervals.sort((a,b)=>{......