在线升级是一个boot,一个APP,boot对APP升级,我能不能不要这里的boot,而是两个APP,分别为APP1区和APP2区,APP1和APP2是相互升级的,每个APP包含了升级程序和主程序。一开始下载APP1,串口接收到特殊帧时开始升级写进app2区,写完之后跳转至app2,app2也是接收到特殊命令帧开始升级,对app1区写,写完之后跳转至app1运行.....,当然重新上电运行哪个app由标志确定,这样可行吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
理论上可行,如果你的程序链接时是位置无关的话。
运行时自动获取当前FLASH地址,这样性能略低,但功能上没问题,需要编译器配合。
或支持MMU映射地址。
简单点就是,STM32上面不太可行,或不建议使用。
STM32上面常用的是 boot+app+swap
新APP先下载到SWAP,校验通过后再由boot复制到app区。
然后跳转过去运行。
swap区可以使用片内FLASH,也可以使用SPI FLASH等。
不太懂....什么程序链接,或支持MMU地址。。。水平有限。。。
我这里没有单独的bootloader,整个flash就是两个app,app里面有升级程序,两个可以相互升级,相互跳转。而且二楼的大神好像说比较可以实现但是任务量比较大。。
bootloader只是在起始地址的程序而已,它和程序A、B一样,都只是程序,只不过一个里面代码是串口读升级包再跳转,而另一个是各种打印加控制,你把固定的A程序放在0x8000000这个位置也行啊。任务量大不大,你试试嘛,我觉得并不大,逻辑整明白点。二楼说的我也没弄明白
不过这个是对的“STM32上面常用的是 boot+app+swap
新APP先下载到SWAP,校验通过后再由boot复制到app区。
然后跳转过去运行。”,也比较易实现
一般试过后就会发现,还是经典的结构好用,包括windows/linux 都是bootloader+App,各司其职。我的建议是:不要浪费时间走弯路了。
一周热门 更多>