我正在做一个bootloader(boot+app1+app2)。
app1运行的时候,升级app2,校验合法后,然后重启直接运行APP2。
app2运行的时候,升级app1,校验合法后,然后重启直接运行APP1。。。。。。
目前的困难是,如何能够将APP1与APP2做成同一个固件?今天对比了下不同位置的固件,发现只有前480个字节的vector table不同。
今天做了些尝试,app的固件以地址0x8000000生成(RAM预留1k,以存放中断向量表)。
bootloader运行时,将vector table 整个复制到RAM的最前面(根据APP的不同地址,重新修正中断向量表,比如app2的运行地址是0x80005000,则将中断向量表统一加上0x5000);
但是发现这样子行不通,无法正常运行。是不是我哪里有缺漏的地方?
实在没办法的话,只能固件升级时,将中断向量表修改掉??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
回退的实现本身就需要很多条件,如果你更新完了A有和回退相关的bug,还是死路一条。如果任何情况下你能通过Bootloader重新update firmware,则完全没必要存储旧的image。
嗯,目前已经启用A运行B存储的方案了。
你是通过什么升级?
我都是把固件放在远端服务器
然后设备判断应该升级哪个固件
下载的时候直接就截断了
不需要把合并的固件都下载下来
这个是 正解!!!
再没比这个简单的了?
一周热门 更多>