stm8的bootloader是这样设计的,第一区自然是bootloader即iap地址0x8000---0x9000,第二区程序运行区即app1地址0x9000---0xC800,第三区程序运行2区,(用于在升级断电情况下恢复)例如:老版本固件程序在app1区运行,需要升级即进入bootloader接受数据进行升级,擦写的是zone2区,这时如果断电就继续跳转运行zone1,如果升级成功跳转zone2.地址0xC800---0xFFFF 现在问题来了,zone1和zone2都是正常程序,都需要中断向量表,之前的实现方式是bootloader不要中断向量,做个中断向量映射直接到zone1区。可是zone2区就没法用了,好纠结。 也做过另一种尝试zone1中的程序有中断时跳到bootloader的中断向量中执行bootloader的中断处理函数,然后在中断处理函数中做分支跳转,检测EEPROM中的标志,看是跳转到ZONE1还是ZONE2,这个方法能正常跳转,但是每次跳转都会执行一遍bootloader的程序,不知道怎么回事。 请大牛们帮帮忙。互相进步,希望有同样困然的童鞋能得到帮助。分享是种美德,谢谢。 |
|
|
|
略高深的样子…没弄过 |
帮忙顶一下 |
stm8内部资源太少,没有必要吧 |
楼主找到解决方案没 |
最近也得弄这个还在婴儿阶段========= |
楼主搞定了吗 |
不懂中断向量地址的设置,来学习 |