80x51上做代码在线更新,求高手指点
各位好,
小弟最近在单片机上做一个代码在线升级的东西,eepROM,存储代码段的区域可擦除并可以读写,因为之前我是做arm的,对单片机和keil也不是很熟悉,我理解单片机是这样执行代码的,首先上电后,代码从0地址开始执行,在startup的代码中跳至main运行,现在假设程序烧写进去后,因为代码问题想要在代码运行过程中更新代码本身,但是程序运行过程中又要在code段取指令运行,如果这个时候去更新,这样肯定会出问题的。
前两天想用绝对地址的办法,把可能会更新的文件定义到绝对地址,如果在后面要更新的话,直接去替换对应的文件,但是后面发现只要改动了一个文件某一个地方,对比生成的烧写文件,不止绝对地址的地方改动了,基本上整个烧写文件都改变了,这样就要更新整个code区,还是不行。
求大侠们指点迷津啊,先谢谢了!
[解决办法]
可以这样做:
1 Bootloader 不采用中断方式。Boot 部分可以检测你的 COS 区起始地址页是否为空(当然也可以是指定的某一地址的一个标志),如果没有 COS 就跳到 Loader 例程,如果有就跳入 COS。
2 将你的 COS 工程设置成包含中断向量表的。
3 更新 COS 时,使用一个后门命令删除 COS 起始页或指定标志。重新上电就可以回到 Bootloader 控制。
[解决办法]