搜索
bottom↓
回复: 16

咨询下远程IAP升级代码的事情

[复制链接]

出0入0汤圆

发表于 2017-11-13 15:22:55 | 显示全部楼层 |阅读模式
本帖最后由 tingfengqilang 于 2017-11-13 15:29 编辑

  为了做到能IAP升级,分为bootloader与APP。
    当第一次更新升级后,APP应用在run,下次如果还要下一版本的软件升级(即每次更新固件代码都要重启硬件),又要先进入到bootloader区才能实现APP区的刷新。
    那么如果设备放在很远的地方进行TFTP更新,为了重启硬件进入bootloader区有什么好方法?
    如果更新后运行出错,又要回滚回原始版本,方案如何考虑?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2017-11-13 15:46:16 | 显示全部楼层
我是这样做的:接收到正确的更新程序,先保存到备份的flash区,然后置个需更新的标志,然后软复位,然后运行bootloader,判断是否需要更新,需要的话,把保存到备份flash的程序copy到app区,copy完清需要更新的标志,然后再跳转去运行app

出0入0汤圆

发表于 2017-11-13 15:47:19 | 显示全部楼层
分3个区 一个bootloader区 一个APP区 一个更新程序存储区,正常是运行在APP区,APP区接收到更新程序命令后,存储完更新程序后软复位到bootloader区进行升级

出0入0汤圆

发表于 2017-11-13 15:48:23 | 显示全部楼层
先把APP存到FLASH,当前APP判断接收完毕并正确,重启。    bootloader检测FLASH里是否有新APP,有的话升级,运行。

出0入0汤圆

发表于 2017-11-16 13:01:46 来自手机 | 显示全部楼层
俺家的办法是在BOOTLOAD中校对应用程序,与更新程序对比。如果有不同且更新程序校验正确就拷贝到应用区。

出0入0汤圆

发表于 2017-11-28 17:46:14 | 显示全部楼层
我和5楼的差不多,你要考虑下载新app一半时复位了怎么办,把新版app向运行区域拷贝是复位了怎么办,总之除了考虑正常更新流程还要考虑在更新的任何环节出现故障后如何保证系统还能恢复过来。

出0入8汤圆

发表于 2017-11-28 23:31:22 来自手机 | 显示全部楼层
我先放到外置的flash再软复位....

出0入0汤圆

发表于 2017-11-29 22:42:19 | 显示全部楼层
ljx289 发表于 2017-11-28 23:31
我先放到外置的flash再软复位....

这个方法貌似比较近靠谱

出0入8汤圆

发表于 2017-11-29 23:17:45 来自手机 | 显示全部楼层
hpdell 发表于 2017-11-29 22:42
这个方法貌似比较近靠谱

不过要加密后放到外置flash,外置flash保存最近升级的3-5个版本,升级失败自动恢复到前一个版本,如果所有版本都失败那就是出厂的固件,出厂固件在内置的flash固定位置永不变!

出0入0汤圆

发表于 2017-11-30 09:18:00 | 显示全部楼层
ljx289 发表于 2017-11-29 23:17
不过要加密后放到外置flash,外置flash保存最近升级的3-5个版本,升级失败自动恢复到前一个版本,如果所 ...

这个做法貌似感觉比较好啊

出0入4汤圆

发表于 2017-11-30 09:46:48 | 显示全部楼层
最近也在折腾这个

出0入0汤圆

发表于 2017-11-30 22:35:17 来自手机 | 显示全部楼层
arm 发表于 2017-11-13 15:46
我是这样做的:接收到正确的更新程序,先保存到备份的flash区,然后置个需更新的标志,然后软复位,然后运 ...

和你做法一样,另做了分段下载(有点像断点续传),完全下载后再进行更新

出0入0汤圆

发表于 2017-12-1 09:12:47 | 显示全部楼层
ljx289 发表于 2017-11-29 23:17
不过要加密后放到外置flash,外置flash保存最近升级的3-5个版本,升级失败自动恢复到前一个版本,如果所 ...

这个方法比较好,问题好像就是出厂的代码与后期更新代码不完全兼容,向量表啥的都要单独设置

出0入0汤圆

发表于 2017-12-3 12:33:27 来自手机 | 显示全部楼层
app程序比较大时,内置flash去区保存iap,app,appB

出0入0汤圆

发表于 2017-12-3 12:35:36 来自手机 | 显示全部楼层
程序较大时,同时存储boot程序,用户程序,用户程序备份,那么可用的用户程序空间就很有限了

出0入8汤圆

发表于 2018-6-29 21:59:24 | 显示全部楼层
upli 发表于 2017-12-3 12:35
程序较大时,同时存储boot程序,用户程序,用户程序备份,那么可用的用户程序空间就很有限了 ...

只要能保证运行2个程序,其他的固件放在外置的flash,除非那两个保存在mcu的flash中的固件都死掉了,否则是可以不断恢复到前一个可用的固件版本的,并且通知云服务器哪一个固件在哪一台机出了问题。。。哈哈!

出0入0汤圆

发表于 2018-6-29 22:30:30 | 显示全部楼层
本帖最后由 cnxh 于 2018-6-29 22:34 编辑

我是一个boot,2个app,boot可下载app1,app1可下载app2,上电直接进app2,连接后可以选择进boot,app1或app2运行,app2中断入口在app1中断向量内,中断时根据运行状态是app1进app1处理,是app2进app2处理
boot,程序锁死不能iap,app1和app2可iap,平时只修改app2程序运行,这样的好处是,boot区容量太小,只有基本的下载功能如只有1个串口功能,2个串口时程序容量不够,而app1容量可以自己选择,这样程序可以搞成2个串口都可以下载app2,和增加其它功能,相当于boot工厂模式程序,app1系统模式程序,app2用户模式程序,平时只修改app2,如果只有一个boot,以后远程升级boot程序,如原来boot程序只有一个串口下载app功能,现在想升级为2个串口下载功能,boot区升级时,万一断电就嗝屁了,而我的就升级app1,万一失败时,可以再用boot恢复
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 10:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表