IAP升级疑问

2019-07-21 06:17发布

  看到大神都将flash分为2部分升级,但是目标bin文件生成时不是需要写入SCB->VTOR的值,还有IROM的起始值吗?那这样的话还是只能某个目标Bin文件到设置值里的flash中,而不能做到APP1和APP2相互升级啊?有没有大神解答一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
坠灬辰
1楼-- · 2019-07-22 02:41
 精彩回答 2  元偷偷看……
坠灬辰
2楼-- · 2019-07-22 07:15
brave_dancing 发表于 2018-12-29 09:25
没能明白你的问题是啥。你的意思是说user程序有两份?这两份是版本不一样吗?  还有两个APP交替升级?
如 ...

load程序中设置SCB->VTOR后,在跳转程序到app后,会执行SystemInit(); 而这个初始化函数会重新设置这个值,你在load中设置的会失效啊
brave_dancing
3楼-- · 2019-07-22 12:29
坠灬辰 发表于 2018-12-29 09:31
load程序中设置SCB->VTOR后,在跳转程序到app后,会执行SystemInit(); 而这个初始化函数会重新设置这个值 ...

你对SystemInit这个函数修改一下就可以了,让他使用bootload设置的中断像量表
brave_dancing
4楼-- · 2019-07-22 16:02
坠灬辰 发表于 2018-12-29 09:30
我的意思是将flash分为3部分  bootloader app1 app2  当我升级的时候,要是升级过程中失败了,还能能跳转 ...

这个功能实现起来估计会比较麻烦!IAP升级一般分为三部分,bootload,app,data区,app是运行去,data是下载数据存放区,如果下载过程成功,而且校验没错,可以擦除app区,然后从data区拷贝过来,如果下载失败则执行原来的程序。
brave_dancing
5楼-- · 2019-07-22 20:16
本帖最后由 brave_dancing 于 2018-12-29 12:19 编辑

bootload实现思路(个人见解,如有不合理请谅解)

IAP升级思路

分区:bootload、app、data
三个分区功能
1、bootload负责下载串口或者其它通信接传过来的数据
2、app是user程序运行区
3、data是user程序备份区
程序设计思路
系统开机运行bootload程序,bootload判断是否要下载新程序到data区,然后再判断data区程序是否要拷贝到app区,然后判断app区是否可以执行程序。
     bootload下载数据时,只有下载完成,且校验通过之后才允许data区拷贝到app区
     bootload拷贝data区数据到app区的时候,先擦除,在拷贝完成之设置一个标志,表明本次拷贝无误,可以执行app,否则下次开机继续拷贝数据

一周热门 更多>