合并HEX文件(合并Bootloader和应用程序)

本帖最后由 Leotower 于 2013-11-27 20:41 编辑

当烧写加载Arduino Leonardo的Bootloader(Caterina-Leonardo.hex)后,单板重新启动后将会运行Blink程序。这是因为该“Bootloader”其实是Bootloader和Blink应用程序合并而成的。这个合并过程很简单,了解了HEX文件和AVR Flash空间分布就可以理解其原理。
1、HEX文件: http://baike.baidu.com/view/1229888.htm?fromtitle=HEX%E6%96%87%E4%BB%B6&fromid=4131648&type=syn
HEX文件是格式化的文本文件,合并两个HEX文件只要用文本编辑器将两个HEX文件的内容放在一起,并将中间的文件结束记录(EOF)去掉即可。当然如果两个HEX文件地址是有重叠等异常情况,则说明要合并的文件之间有冲突。手工合并毕竟效率低,后面讲介绍一个实用工具。

2、Flash空间
对于支持Bootloader的AVR,其应用程序区和Bootloader区示意如下(详细参见datasheet中Boot Loader Support)

avrflash.JPG (15.9 KB, 下载次数: 1)

下载附件

保存到相册

2013-11-26 21:56 上传

3、启动过程MCU/CPU启动或复位后其运行的第一条指令地址是由硬件决定的。对于支持Bootloader的AVR,若通过FUSE位选择了Bootloader区,则第一条指令地址为Bootloader的起始地址。在Bootloader运行结束后通过跳转指令跳转到0地址(由程序编写而定),开始运行应用程序。


这里为大家介绍一个实用小工具,可以将两个HEX文件合并,效率高而可靠。当然该工具不对地址是否重叠进行检查。工具的作者是Lisper。
运行环境:windows 虚拟DOS命令格式:请在cmd串口下使用帮助cathex /?

D:\tools\cathex>cathex /?this program use for connect twohexfilecreated bylisper<leyapin@gmail.com> from DFRobotIt will delete the last row of infile1please input:cathex infile1 infile2 outfile
工具:

标签: Arduino教程