TA的每日心情 | 开心 2023-5-15 15:14 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
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 |
|