首页 > 代码库 > ATmega128中应用的hex与bootloader的hex合并的实现
ATmega128中应用的hex与bootloader的hex合并的实现
1、合并的可行性分析
在划分区域的时候,通过设置熔丝位BOOTSZ为00,以实现对应用区及bootloader区大小的定义。
如下配置,我们设置boot区为4096个字,即8K字节大小,这样应用区就有120K字节可供使用。
分析其应用的固件hex时我们发现,应用的固件程序总是以
:020000020000FC (表示扩展段地址从0x0000开始)开头,以 :00000001FF (表示文件已经结束)结束,
分析bootloader的固件hex时我们发现,bootloader的固件程序总是以
:020000021000EC (表示扩展段地址从0x1000开始)开头,以 :00000001FF (表示文件已经结束)结束。
这样我们会想着试一试,是否只保留一个文件结束标记(:00000001FF)便能满足既可升级又可跑业务流程的功能呢?
实际上正是如此。
2、手工拼接
这样在手工合并时,我们只要将boot的hex复制到应用的hex之前,且删除boot的hex的结束标记即可。具体的样例如下:
:020000021000EC:10E000000C9467F418951895189518951895189507:10E010001895189518951895189518951895189598:10EA50006F776E6C6F61640D0A002D20275227209E:10EA6000526573746172740D0A002D2027422720AD:10EA700052756E204170706C69636174696F6E0DC0:10EA80000A0054696D65204F7574210D0A000D0A46:0BEA900053756363657373210D0A006A:040000031000E00009:020000020000FC:100000000C94F1461895189518951895189518950B:1000100018951895189518950C94F8190C941704C0:100020001895189518951895189518951895189568:100030001895189518951895189518951895189558:100040000C94BC45189518950C94F4441895189583:100050001895189518951895189518951895189538:100060001895189518951895189518951895189528:1097D000504F50454E3A20302C30002B43495053C7:1097E000454E443A2030000101000000FFFF00FF19:1097F000FFFFFFFFFF0041542B4349504F50454EA0:109800003D302C22544350222C22002B4349504FF0:1098100050454E3A002B4349504F50454E3A203068:109820002C34002B4349504F50454E3A20302C30B9:1098300000FFFF0000000000000000FFFFFFFFFF2F:09984000FFFFFFFFFFFFFFFF0027:0400000300000000F9:00000001FF
将类似于以下格式的拼合固件烧写到ATmega128的片内flash中即可支持升级操作又可跑系统业务。
3、拼接程序的Qt实现
先看一下应用的效果图:
使用方法为:先打开bootloader的hex,再打开应用程序的hex,点hexMerge会在与固件相同目录下生成拼接后的hex,或者点 hexMerge As
指定存放拼接后的hex存放的位置。
Qt源码实现:
https://github.com/aqing1987/ATmega128_HexMerger
ATmega128中应用的hex与bootloader的hex合并的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。