flyingbird 发表于 2009-12-16 09:28:12

如何把bootloader和应用区程序这两个hex文件合并成一个hex文件

我使用的是mega88+avrstudio+GCC,手头有一个bootloader的程序和一个应用区的程序,我想过一个办法,就是先把bootloader先烧录,然后通过上位机将应用程序更新进单片机,最后在将单片机的整个flash读取出来。
请问大家有没有更好更快捷的方法能够实现?
谢谢!

bynce 发表于 2009-12-16 10:39:06

这个简单。编译好的HEX文件都有地址。并且应用程序和BOOT地址不同。分割地址合并就可以了。

flyingbird 发表于 2009-12-16 10:51:21

bynce 罗曼能否详细介绍一下。

ml383 发表于 2009-12-16 12:25:16

有好多种办法.
比如要把loader放在地址0x7000
1、把loader程序绝对定位
#pragma abs_address:0x7000   //也可以是别的地址
void loader(void)
{
   ......
}
#pragma end_abs_address
跟你的应用程序放在一起编译,编译选项选择没有loader

2、用DOS的debug命令
run CMD打开DOS界面
-debug xxx.bin (这里是你的应用程序名)
-n xxx.bin (这里是你的loader程序名)
-l 7100 (要加0x100的地址偏移量)
-rcx
cx xxxx (这里显示的是loader的文件长度)
: xxxx (输入要写的总长度)
-n xxx.bin(新的文件名)
-w100(写入文件)
-q(退出debug)

3、用VC或者VB写一个小程序完成文件自动拼接

roasn 发表于 2009-12-16 12:27:12

最简单的办法:把应用区hex最后一行删掉,然后把bootloader区hex内容全部拷贝到应用区hex后面就行。

flyingbird 发表于 2009-12-17 12:05:23

呵呵非常感谢大家。学到了不少。

powerpan 发表于 2010-1-2 17:18:15

hex2bin main.hex /L7168
hex2bin bootload\bloader.hex slave.bin /M

这样就好了

smartzou 发表于 2010-4-16 12:32:04

mark

flyingcys 发表于 2010-4-16 13:28:29

用编程器软件!

jiabin1024 发表于 2012-3-11 13:51:55

对4l的方法表示怀疑

longwu537 发表于 2012-7-17 22:02:02

学到了,好贴,回去好好测试一下.在网上搜了两天了终于找到了

netawater 发表于 2015-8-18 16:55:38

powerpan 发表于 2010-1-2 17:18
hex2bin main.hex /L7168
hex2bin bootload\bloader.hex slave.bin /M



hex2bin能分享下, 我的没有/M参数
页: [1]
查看完整版本: 如何把bootloader和应用区程序这两个hex文件合并成一个hex文件