yjfself 发表于 2009-5-7 20:45:15

avr bootloader

我的升级思路是:从应用程序区接到升级命令后,通过跳转指令跳转到boot区执行升级.升级成功后,从boot区退出跳到应用区的开始处执行应用程序。


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

windy__xp 发表于 2009-5-7 21:05:46

应用程序中,可以做个复位命令,复位后进入BootLoader区。两个区的程序完全是独立的啊,没有什么影响,程序开始的时候,都需要初始化RAM的。

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

yjfself 发表于 2009-5-7 21:31:57

哦 不好意思啊
上次我发的贴也是您回复的吧很感谢!

wuliwa 发表于 2009-9-26 15:25:37

1楼的高手,请问,那个复位命令怎么写啊?复位时,是不是也要把熔丝位改变,即从bootloader启动,升级完成,又要把熔丝位改回来?谢谢拉

windy__xp 发表于 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区的其实地址不是绝对不便的,这个跟芯片以及熔丝位设置有关,用饿死看门狗复位的方式比较保险。

windy__xp 发表于 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)

lovecsu 发表于 2010-1-13 01:03:13

mark,很好,学习了

cai_mouse 发表于 2010-1-30 20:49:46

受教了,谢谢!

tsw1987 发表于 2010-5-15 10:29:05

受益匪浅!谢一楼!

yeling 发表于 2010-5-26 11:18:56

刚刚开始学习,有点消化不下

number007cool 发表于 2010-5-26 15:13:12

学习了

wcm_e 发表于 2010-5-26 17:53:26

mark

xiaoye00 发表于 2011-5-16 19:40:42

mark

qinglianyoumeng 发表于 2013-4-24 21:41:02

windy__xp 发表于 2009-9-26 15:54 static/image/common/back.gif
熔丝位可以用BootLoader区程序通过SPM指令修改,但是一般不建议这样用,很危险。一般熔丝位设置为从BootLoa ...

高手,加下QQ937928439,有问题请教下
页: [1]
查看完整版本: avr bootloader