如何将keil5中的bin文件合并

前言

       最近有个需求,需要把单片机中的两个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

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值