找回密码
 注册
关于网站域名变更的通知
查看: 143|回复: 0
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
     楼主| 发表于 2024-10-30 17:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x

    4 I9 K8 @2 K( O" {
    2 _- Z  |9 k: |: h! e+ Q& @- _( t用IAP技术进行单片机的自动升级,官方有源码,一般根据需求修改。$ w1 V3 k: O# r  |
    ! |, p- Q  p" d2 i8 K
    比如,因为我们的产品遍布各处,不可能让施工人员一个个去按按键触发升级,所以串口命令触发升级的方式明显更符合实际。以及Ymodem兼容性不好的原因,我们也换成了自己的协议。! ~4 Q8 ]% @1 e, l" _' ]
    9 U, t& b- s$ C2 I
    做了大半个月,出现了一个怪象。3 Q6 K. X( V, ?5 [0 _; s
    1 {& |+ a% s8 ]/ I) S
    IAP下载升级包,100%时跳转APP,APP显示软件版本号,这是正常流程。8 A4 j. Q! A4 R* s$ D5 ^/ P' r
    # M) M: m1 `/ @5 R. t/ [6 N) Q
    但是我们还有个异常和强度测试,在升级的各个阶段不停地拔电复位,看最终是否能升级成功。
    8 Y' B3 ?, e  b' R7 X7 d$ S2 A6 U8 y* y: `, Q5 e. w) Z1 S! l
    同事反应,有时下载100%了,APP没显示版本号,而是又去从0%重新升级了,不停循环,但是重新上电后就一次性升级跳转成功了。一天测试数百次只会出现一次,是小概率事件。复现时,我留意了现象,是APP没正常运行,看门狗重启,又去IAP判断标志位,继续升级了。+ t% t/ f1 w7 j4 H
    & p5 f. F! F+ }7 I
    下载完跳转前要__disable_irq();
    ; s: I5 q9 d/ ^  f' G7 U2 N5 q" R' g* T; K/ \) a2 F
    APP开头就要NVIC_SetVectorTable
    5 `4 L; b  D" @7 p
    9 x2 U( M1 i, Y8 j1 z+ akeil设置好IROM起始地址.....
    " ]+ I% C8 c2 A2 }( ^. u- G/ b/ d/ f8 U1 A
    这些老生常谈自然不用多说。
    $ o- Z; x+ i2 g/ p3 W: Z9 H' s0 u
    - v7 A4 {* L1 ~" s- j' E/ x乍一看很容易以为是APP有问题,或者IAP中断残留,没处理好跑飞了。但是请注意,异常出现后,只要拔电复位,一样的APP,能够升级成功,这说明APP是没问题的;7 N" r( {( |4 N: k! c" g; t6 T* l
    ' F: l# J  i0 Q7 h
    如果中断没处理好,那不会升级700次才出现1次bug;' C& Z: R6 W' ]5 I9 S4 f* G0 x6 y
    ; \) g" r; X. A! o0 @/ |% ]6 L0 u
    所以才能称之为“怪象”。9 l# w. ]" o% M6 O+ R& a
    1 u3 a# z/ [& _2 H
    除了中断残留,还有堆栈溢出、内存泄漏....各种情况怀疑了一遍,网上没人有类似的情况。1 t% d9 T& I4 J/ l) ]2 E6 p1 p) D+ y# w

    + B+ C: y4 Z* @3 \后来用自动化脚本,每10秒升级一次单片机,把bug复现了3次,每次bug的出现都是不断电连续升级600~800次,把问题定位在了SystemInit();函数,APP就是在这没有继续往下走了。! i) ?0 U( S3 f$ B# v" o
    4 O. q. K+ K$ x
    看到有网友说卡在SetSysClockTo72();里的do while循环出不来。留意了下,想起我的单片机用的是内部8M晶振,没有外接晶振,但是SYSCLK_FREQ_72MHz宏是打开的。按理说这个宏打开了并不会有很大影响,因为系统检测到外部晶振不存在时,仍然会使用内部8M晶振。* {8 w; h! b7 Z/ |& L
    : I- n# a8 ^1 \+ `
    抱着试一试的态度,注释了这个宏,升级了一晚上,3000+次,早上发现bug没出现,升级仍正常。
    4 R0 d; F3 U3 C3 i7 r
    7 E- c- s5 ^% K! s  y" g6 n- |继续测试,用自动化脚本同时测试多台单片机。2 X" G4 Y3 w: t1 [4 L7 }6 X

    6 Y/ M) L& N, d- [' ~1 M不出意外的话,可以得出结论:晶振是多少M最好就用相应的宏,不然即使看起来工作正常,但不代表没隐患。
    / a$ d$ X* h; K% T0 C; @+ Z! ^! k, o

    8 z; t# a% ]2 [1 M: p
    % C; v& k9 ^# U
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-9-24 05:21 , Processed in 0.125000 second(s), 28 queries , Gzip On.

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

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

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