找回密码
 注册
关于网站域名变更的通知

stm32的IAP升级小概率跑飞问题

2024-10-30 18:03| 查看: 140| 评论: 0

摘要: 用IAP技术进行单片机的自动升级,官方有源码,一般根据需求修改。 比如,因为我们的产品遍布各处,不可能让施工人员一个个去按按键触发升级,所以串口命令触发升级的方式明显更符合实际。以及Ymodem兼容性不好的 ...
下载1.jpg

用IAP技术进行单片机的自动升级,官方有源码,一般根据需求修改。

比如,因为我们的产品遍布各处,不可能让施工人员一个个去按按键触发升级,所以串口命令触发升级的方式明显更符合实际。以及Ymodem兼容性不好的原因,我们也换成了自己的协议。

做了大半个月,出现了一个怪象。

IAP下载升级包,100%时跳转APP,APP显示软件版本号,这是正常流程。

但是我们还有个异常和强度测试,在升级的各个阶段不停地拔电复位,看最终是否能升级成功。

同事反应,有时下载100%了,APP没显示版本号,而是又去从0%重新升级了,不停循环,但是重新上电后就一次性升级跳转成功了。一天测试数百次只会出现一次,是小概率事件。复现时,我留意了现象,是APP没正常运行,看门狗重启,又去IAP判断标志位,继续升级了。

下载完跳转前要__disable_irq();

APP开头就要NVIC_SetVectorTable

keil设置好IROM起始地址.....

这些老生常谈自然不用多说。

乍一看很容易以为是APP有问题,或者IAP中断残留,没处理好跑飞了。但是请注意,异常出现后,只要拔电复位,一样的APP,能够升级成功,这说明APP是没问题的;

如果中断没处理好,那不会升级700次才出现1次bug;

所以才能称之为“怪象”。

除了中断残留,还有堆栈溢出、内存泄漏....各种情况怀疑了一遍,网上没人有类似的情况。

后来用自动化脚本,每10秒升级一次单片机,把bug复现了3次,每次bug的出现都是不断电连续升级600~800次,把问题定位在了SystemInit();函数,APP就是在这没有继续往下走了。

看到有网友说卡在SetSysClockTo72();里的do while循环出不来。留意了下,想起我的单片机用的是内部8M晶振,没有外接晶振,但是SYSCLK_FREQ_72MHz宏是打开的。按理说这个宏打开了并不会有很大影响,因为系统检测到外部晶振不存在时,仍然会使用内部8M晶振。

抱着试一试的态度,注释了这个宏,升级了一晚上,3000+次,早上发现bug没出现,升级仍正常。

继续测试,用自动化脚本同时测试多台单片机。

不出意外的话,可以得出结论:晶振是多少M最好就用相应的宏,不然即使看起来工作正常,但不代表没隐患。



本站资讯文章系编辑转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!
[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。
本站拥有对此声明的最终解释权。
收藏 邀请
关闭

推荐内容上一条 /1 下一条

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-4 18:50 , Processed in 0.125000 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

返回顶部