搜索
bottom↓
回复: 13

avr bootloader

[复制链接]

出0入0汤圆

发表于 2009-5-7 20:45:15 | 显示全部楼层 |阅读模式
我的升级思路是:从应用程序区接到升级命令后,通过跳转指令跳转到boot区执行升级.升级成功后,从boot区退出跳到应用区的开始处执行应用程序。


请问在这个过程中,应用区和boot区的变量是否会互相影响到呢?avr是怎样处理这种事情的呢?还请各位爱玩单片机的朋友出来讨论讨论!指教指教!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-5-7 21:05:46 | 显示全部楼层
应用程序中,可以做个复位命令,复位后进入BootLoader区。两个区的程序完全是独立的啊,没有什么影响,程序开始的时候,都需要初始化RAM的。

    新来的,不懂规矩啊,注意不要重复发贴哦。

出0入0汤圆

 楼主| 发表于 2009-5-7 21:31:57 | 显示全部楼层
哦 不好意思啊  
上次我发的贴也是您回复的吧  很感谢!

出0入0汤圆

发表于 2009-9-26 15:25:37 | 显示全部楼层
1楼的高手,请问,那个复位命令怎么写啊?复位时,是不是也要把熔丝位改变,即从bootloader启动,升级完成,又要把熔丝位改回来?谢谢拉

出0入0汤圆

发表于 2009-9-26 15:54:14 | 显示全部楼层
熔丝位可以用BootLoader区程序通过SPM指令修改,但是一般不建议这样用,很危险。一般熔丝位设置为从BootLoader区启动,系统复位就会从BootLoader区开始执行,如果升级完毕或者升级等待延迟,可以使用跳转指令跳转到工作区:
asm("JMP 0x0000");   // 在Flash大于等于16K的AVR中,支持JMP指令
或者:
asm("RJMP 0x0000");  // 在Flash小于等于8K的AVR中,一般只支持RJMP指令

    另外,如果需要从工作区进入BootLoader区,我一般使用饿死看门狗的方式,复位进入,而不是使用直接的跳转,因为一般来说BootLoader区的其实地址不是绝对不便的,这个跟芯片以及熔丝位设置有关,用饿死看门狗复位的方式比较保险。

出0入0汤圆

发表于 2009-9-26 16:01:21 | 显示全部楼层
【3楼】 wuliwa

1楼的高手,请问,那个复位命令怎么写啊?复位时,是不是也要把熔丝位改变,即从bootloader启动,升级完成,又要把熔丝位改回来?谢谢拉  
--------------------------------------------------------
    哦,开始每看清楚你的问题,复位命令是自己协议定义的。任何的通信数据,或者事件,你都可以把它当着复位命令,一旦数据或事件发生,调用一段看门狗饿死程序,就可以复位进入BootLoader区了(前提:熔丝位以设置从BootLoader区启动)。下面给一个饿死看门狗复位系统的宏,芯片为Mega168,步骤如下:
1. 关中断
2. 设置看门狗益处时间最短
3. 死循环,知道看门狗益处复位
   
// 注意,WDTSCR 地址为 0x60,在插入的汇编指令中,直接使用其地址
#define SYSTEM_RESET() do {                                 \
                            asm("NOP");                     \
                            asm("CLI");                     \
                            asm("WDR");                     \
                            asm("LDI R16, 0x18");           \
                            asm("STS 0x60, R16");           \
                            asm("LDI R16, 0x08");           \
                            asm("STS 0x60, R16");           \
                            asm("WDR");                     \
                            asm("system_reset_loop:");      \
                            asm("NOP");                     \
                            asm("RJMP system_reset_loop");  \
                       }while(0)

出0入0汤圆

发表于 2010-1-13 01:03:13 | 显示全部楼层
mark,很好,学习了

出0入0汤圆

发表于 2010-1-30 20:49:46 | 显示全部楼层
受教了,谢谢!

出0入0汤圆

发表于 2010-5-15 10:29:05 | 显示全部楼层
受益匪浅!谢一楼!

出0入0汤圆

发表于 2010-5-26 11:18:56 | 显示全部楼层
刚刚开始学习,有点消化不下

出0入0汤圆

发表于 2010-5-26 15:13:12 | 显示全部楼层
学习了

出0入0汤圆

发表于 2010-5-26 17:53:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-16 19:40:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-4-24 21:41:02 | 显示全部楼层
windy__xp 发表于 2009-9-26 15:54
熔丝位可以用BootLoader区程序通过SPM指令修改,但是一般不建议这样用,很危险。一般熔丝位设置为从BootLoa ...

高手,加下QQ937928439,有问题请教下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 02:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表