2019-07-21 06:17发布
brave_dancing 发表于 2018-12-29 09:25 没能明白你的问题是啥。你的意思是说user程序有两份?这两份是版本不一样吗? 还有两个APP交替升级? 如 ...
坠灬辰 发表于 2018-12-29 09:31 load程序中设置SCB->VTOR后,在跳转程序到app后,会执行SystemInit(); 而这个初始化函数会重新设置这个值 ...
坠灬辰 发表于 2018-12-29 09:30 我的意思是将flash分为3部分 bootloader app1 app2 当我升级的时候,要是升级过程中失败了,还能能跳转 ...
最多设置5个标签!
load程序中设置SCB->VTOR后,在跳转程序到app后,会执行SystemInit(); 而这个初始化函数会重新设置这个值,你在load中设置的会失效啊
你对SystemInit这个函数修改一下就可以了,让他使用bootload设置的中断像量表
这个功能实现起来估计会比较麻烦!IAP升级一般分为三部分,bootload,app,data区,app是运行去,data是下载数据存放区,如果下载过程成功,而且校验没错,可以擦除app区,然后从data区拷贝过来,如果下载失败则执行原来的程序。
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,否则下次开机继续拷贝数据
一周热门 更多>