如何把原来的应用程序和Bootloader联系起来
我是新手,用ATMEGA161学习C编程,请大家帮忙:写好了应用程序,编译和工作正常。我想加入Bootloader增加远程升级功能,从“新手快速入门”里下载了Bootloader范例,根据ATMEGA161修改后编译成功。但 把应用程序和Bootloader放在同一工程里编译时会出错,因为两个C文件里都有main(),把Bootloader里的main()改名也出错。不知道如何把原来的应用程序和Bootloader联系起来,用一个HEX文件写进FLASH。 请指教我应该怎样做,谢谢。
我的开发环境是:
AVR Studio 4.14.589
AVR GCC
ATMEGA161 关注 分开编译,然后写bootloader,通过bootloader写主程序 我想用一个HEX文件写进FLASH。 重点关注 两个程序,分别下载,注意BOOTLOADER的地址要设置好 guanzhu 很简单
在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
} 楼上的思路很清晰 如果bootloader和app有交叉调用的话死的很惨。这不叫思路清晰,到时候思路混乱。 关注 thrive 发表于 2009-3-25 16:25 static/image/common/back.gif
两个程序,分别下载,注意BOOTLOADER的地址要设置好
先下载bootloader中的程序在下载应用区的程序会把bootloader中的程序刷掉。下载器上面的芯片擦出钩钩已经去掉了。怎么解决 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区里;
有谁知道方法 或 相关资料的麻烦告诉我,谢谢。 Free_Bird 发表于 2013-6-29 22:16 static/image/common/back.gif
不同编译环境的操作会有不同;
bootloader程序需要下载到boot区(Flash高地值端),然后通过串口,用Xmod ...
额没用过IAR 。一直在用AVR了。现在在考虑如何在bootloader校验程序下载是否正确 原来的肯定不行,要改的 Bootloader是引导程序,要分开来烧写吧。 先建立bootloader,再利用bootloader来写app
不应该一起编译,也没必要互相调用
页:
[1]