关于IAP的想法

2019-07-25 11:05发布

在线升级是一个boot,一个APP,boot对APP升级,我能不能不要这里的boot,而是两个APP,分别为APP1区和APP2区,APP1和APP2是相互升级的,每个APP包含了升级程序和主程序。一开始下载APP1,串口接收到特殊帧时开始升级写进app2区,写完之后跳转至app2,app2也是接收到特殊命令帧开始升级,对app1区写,写完之后跳转至app1运行.....,当然重新上电运行哪个app由标志确定,这样可行吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
aozima
1楼-- · 2019-07-25 14:08
本帖最后由 aozima 于 2017-11-16 14:33 编辑

理论上可行,如果你的程序链接时是位置无关的话。
运行时自动获取当前FLASH地址,这样性能略低,但功能上没问题,需要编译器配合。

或支持MMU映射地址。

简单点就是,STM32上面不太可行,或不建议使用。
STM32上面常用的是  boot+app+swap
新APP先下载到SWAP,校验通过后再由boot复制到app区。
然后跳转过去运行。

swap区可以使用片内FLASH,也可以使用SPI FLASH等。
带我足够强大
2楼-- · 2019-07-25 19:25
aozima 发表于 2017-11-16 14:32
理论上可行,如果你的程序链接时是位置无关的话。
运行时自动获取当前FLASH地址,这样性能略低,但功能上 ...

不太懂....什么程序链接,或支持MMU地址。。。水平有限。。。
yuzeyuan1
3楼-- · 2019-07-26 00:53
 精彩回答 2  元偷偷看……
带我足够强大
4楼-- · 2019-07-26 05:29
yuzeyuan1 发表于 2017-11-16 15:40
只要内部flash放的下两个程序,甚至多个程序都可以。
执行完bootloader可以任意让它跳到一个地址,比如0x8 ...

我这里没有单独的bootloader,整个flash就是两个app,app里面有升级程序,两个可以相互升级,相互跳转。而且二楼的大神好像说比较可以实现但是任务量比较大。。
yuzeyuan1
5楼-- · 2019-07-26 05:56
带我足够强大 发表于 2017-11-16 16:02
我这里没有单独的bootloader,整个flash就是两个app,app里面有升级程序,两个可以相互升级,相互跳转。 ...

bootloader只是在起始地址的程序而已,它和程序A、B一样,都只是程序,只不过一个里面代码是串口读升级包再跳转,而另一个是各种打印加控制,你把固定的A程序放在0x8000000这个位置也行啊。任务量大不大,你试试嘛,我觉得并不大,逻辑整明白点。二楼说的我也没弄明白
不过这个是对的“STM32上面常用的是  boot+app+swap
新APP先下载到SWAP,校验通过后再由boot复制到app区。
然后跳转过去运行。”,也比较易实现
chun307
6楼-- · 2019-07-26 05:59
为什么要两个程序呢?用系统2个task不是更好? 想执行直接启动 不想执行 删除就可以。
一般试过后就会发现,还是经典的结构好用,包括windows/linux 都是bootloader+App,各司其职。我的建议是:不要浪费时间走弯路了。

一周热门 更多>