从 0 地址执行LFU
LFU放flash的尾端, 执行LFU时如果擦除了第0页又没写回去那就悲剧了, 很有可能再也跑不到LFU部分了修改了一下LGT官方的LFU 让他从0地址启动, 其实就是增加了个中断向量表通过rjmp跳到应用部分
进中断的效率比LGT芯片正常程序会慢一个时钟,与AVR相同
RJMP K 相对跳转 PC ← PC + K + 1 None 1 2 2
JMP K 直接跳转 PC ← K None 2 3 4
目前只是测试一下能用了, 不过长度已经超过512字节了{:sweat:}
普通工程支持这个LFU需要增加编译选项
-Wl,-section-start=.text=0x400
LFU_Tool 修改, 跳过装入的二进制文件前1024字节再写入
LFU 增加了中断向量表和进入LFU的检测
testprj 测试工程
进入Bootloader升级条件的代码要放在和Bootloader一起,以免被擦除。
方法:1,如果是硬件跳线,复位后就要立刻检测跳线条件。
2,如果是在应用程序当中检测进入Bootloader条件(比如SPI,USRAT,自定义协议跳转),在主程序要跳回Bootloader区去检测进入
Bootloader的条件。
这个做法的目的是在升级过程当中主程序升级失败时,还可以重新复位后还可以有进入Bootloader的代码,以致不会变砖。
我个人比较喜欢用LFU直接改掉第一条指令。然后把真正的第一条指令放在LFU上 我的USB HID LFU已经搞定。用LFU自动改掉第一条第二条指令,然后你懂的
页:
[1]