1,目前的方案:将62K的flash 分2个区 0000h-0cfffh做应用程序区 从0d000h做bootloader区 这样做有2个问题是: 1,主程序在上电执行时必须要先jmp 0d000h转到我的bootloader区。 2,当bootloader在下载时如果出现意外,导致下载开始就失败,而擦除了 jmp 0d000h 那就全部完玩,再也进不了bootloader。
2,现在我想,将bootloader放到程序空间的前面比如4K (1000h) 这样也有2个问题 我解决不了。
这些可否在bootloader里面都给先定义了。如下: org 0000h jmp start org 0003h jmp int0 org 000bh jmp time0 org 0013h jmp int1 org 001bh jmp time1 org 0023h jmp uart int0: jmp 1003h ;因为我在bootloader里面是不用在任何中断的 time0:jmp 100bh ;串口也是查询收发的 int1: jmp 1013h ;所以不会出现跳转到1000h以后的这些映射地址 time1:jmp 101bh uart: jmp 1023h 这样做的话,当bootloader下载应用程序时,应用程序就很不灵活, 首先,得把定义应用程序的中断向量给阉割,只下载它主函数开始部分写入FLASH 而且 它的中断向量地址都得定义好映射后的地址 感觉这方法很麻烦。
主要问题是应用程序如何来定义上面的中断入口地址,而且还要映射在1000h后面。 大家多提意见 |