hhqq 发表于 2009-3-25 06:00:53

如何把原来的应用程序和Bootloader联系起来

我是新手,用ATMEGA161学习C编程,请大家帮忙:

写好了应用程序,编译和工作正常。我想加入Bootloader增加远程升级功能,从“新手快速入门”里下载了Bootloader范例,根据ATMEGA161修改后编译成功。但 把应用程序和Bootloader放在同一工程里编译时会出错,因为两个C文件里都有main(),把Bootloader里的main()改名也出错。不知道如何把原来的应用程序和Bootloader联系起来,用一个HEX文件写进FLASH。 请指教我应该怎样做,谢谢。

我的开发环境是:
AVR Studio      4.14.589
AVR GCC
ATMEGA161

linxiaolong 发表于 2009-3-25 09:58:05

关注

pinocchio 发表于 2009-3-25 10:14:30

分开编译,然后写bootloader,通过bootloader写主程序

hhqq 发表于 2009-3-25 10:20:29

我想用一个HEX文件写进FLASH。

ratrat 发表于 2009-3-25 12:57:49

重点关注

thrive 发表于 2009-3-25 16:25:20

两个程序,分别下载,注意BOOTLOADER的地址要设置好

TYMCU 发表于 2009-3-25 16:27:35

guanzhu

superlxt 发表于 2009-7-22 01:41:31

很简单
在avr studio里project->configuration->memory settings添加下flash .bootloader 0x1c00(取决于实际情况),然后程序这么写
void boot(void) __attribute__((section(".bootloader")));

int main(void)
{
//app code
}


void boot(void)
{
//bootloader code
}

vv3g 发表于 2009-7-22 11:50:29

楼上的思路很清晰

heky 发表于 2009-7-22 13:43:30

如果bootloader和app有交叉调用的话死的很惨。这不叫思路清晰,到时候思路混乱。

qzzz 发表于 2009-7-22 14:29:10

关注

haolei432370 发表于 2013-6-20 17:07:00

thrive 发表于 2009-3-25 16:25 static/image/common/back.gif
两个程序,分别下载,注意BOOTLOADER的地址要设置好

先下载bootloader中的程序在下载应用区的程序会把bootloader中的程序刷掉。下载器上面的芯片擦出钩钩已经去掉了。怎么解决

Free_Bird 发表于 2013-6-29 22:16:47

haolei432370 发表于 2013-6-20 17:07 static/image/common/back.gif
先下载bootloader中的程序在下载应用区的程序会把bootloader中的程序刷掉。下载器上面的芯片擦出钩钩已经 ...

不同编译环境的操作会有不同;
bootloader程序需要下载到boot区(Flash高地值端),然后通过串口,用Xmodem协议将应用程序更新;

我也试过-----将应用程序App.Hex的最后一行删掉,然后将 Boot.Hex的内容全部拷到App.Hex剩余内容的下面,然后保存;将这个文件写入AVR,引导程序和应用程序运行也都是正确的;

另:我现在遇到问题了,环境用IAR,但是我不知道如何修改 *.xcl 文件,来修改程序在Flash的起始地址 及 中断映射地址; 结果就是我的Boot程序总是烧写在应用区,写不到BOOT区里;

有谁知道方法 或 相关资料的麻烦告诉我,谢谢。

haolei432370 发表于 2013-6-30 10:14:07

Free_Bird 发表于 2013-6-29 22:16 static/image/common/back.gif
不同编译环境的操作会有不同;
bootloader程序需要下载到boot区(Flash高地值端),然后通过串口,用Xmod ...

额没用过IAR 。一直在用AVR了。现在在考虑如何在bootloader校验程序下载是否正确

NJ8888 发表于 2013-6-30 10:25:10

原来的肯定不行,要改的

嵌入我心 发表于 2013-6-30 12:20:21

Bootloader是引导程序,要分开来烧写吧。

richyhuang 发表于 2013-6-30 12:31:15

先建立bootloader,再利用bootloader来写app
不应该一起编译,也没必要互相调用
页: [1]
查看完整版本: 如何把原来的应用程序和Bootloader联系起来