|
wt2rxk0nxol64012789922.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
wt2rxk0nxol64012789922.gif
2024-11-23 22:07 上傳
5 h* d+ m5 ]; B8 W
點(diǎn)擊上方藍(lán)色字體,關(guān)注我們0 s9 ~& X3 s) b; Y3 u; I# _* k5 j
來源于粉絲提問。
% h. S( Z5 V* w8 W4 J1 |; A* {8 Z6 Q; B" ~" P
mzfvs0kzqow64012790022.png (113.39 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
mzfvs0kzqow64012790022.png
2024-11-23 22:07 上傳
! V' C, O& f8 n( P$ r$ \6 T% a) R% B- n5 c6 [ m
0ug1jrywqiq64012790122.png (336.25 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
0ug1jrywqiq64012790122.png
2024-11-23 22:07 上傳
! G C5 ?0 n1 J7 [/ y7 n2 p" w: x Z0 I& P$ \5 c T
7 j2 k3 C$ M6 N. t
問題1:IAP的退出機(jī)制是通過跳轉(zhuǎn)到業(yè)務(wù)APP實(shí)現(xiàn)的,實(shí)際上是“轉(zhuǎn)移控制權(quán)”而非退出循環(huán)。 t4 _0 u6 Q" O- _
* c* P2 `7 R$ W/ ^' H( L
! p, C# p/ a. h3 C0 g4 Z問題2:你對(duì)復(fù)位需求的理解是對(duì)的,要實(shí)現(xiàn)“不復(fù)位更新”,需要調(diào)整架構(gòu),如在業(yè)務(wù)APP中集成IAP功能,或者通過雙備份機(jī)制支持熱更新。
1 W$ s; n5 j$ k7 Q/ O- V1 H1
, ]$ U) j) W3 p0 S5 D+ K7 ], n問題1:IAP應(yīng)用的while循環(huán)是怎么退出的?
2 e! v" Z: _8 B在你提供的IAP程序代碼中,while(1)是一個(gè)無限循環(huán)。從代碼邏輯看,IAP應(yīng)用的退出并沒有顯式的break語句。
3 Y6 Y/ v, y4 d2 ^* a7 Z/ J1 R) g- x s- t9 q! `
它的退出依賴于以下邏輯:
& j! H8 a9 T1 N H當(dāng)用戶按下按鍵(代碼中使用了key_get()),且滿足相關(guān)條件時(shí),會(huì)調(diào)用iap_load_app()函數(shù)。iap_load_app()函數(shù)中完成了對(duì)目標(biāo)APP的跳轉(zhuǎn)操作。跳轉(zhuǎn)通過設(shè)置MCU的向量表和程序計(jì)數(shù)器(PC寄存器)完成,實(shí)際等同于切換到業(yè)務(wù)APP的代碼空間并開始執(zhí)行。一旦跳轉(zhuǎn)到業(yè)務(wù)APP,MCU的控制權(quán)就交給了業(yè)務(wù)APP,IAP程序?qū)嶋H上“停止”了,因?yàn)镸CU不再執(zhí)行IAP的指令。
& Y: B2 g* f0 {6 N( k2 z1 z- t2 w
本質(zhì)上,IAP應(yīng)用的退出依賴于代碼跳轉(zhuǎn)(跳轉(zhuǎn)到新的程序入口點(diǎn)),而不是常規(guī)意義的循環(huán)退出。
7 T& x. l+ T0 K2 ~5 ]+ ^) `6 `
. b2 @/ F" s: p1 j因此,while(1)雖然沒有顯式退出,但程序已經(jīng)通過跳轉(zhuǎn)到新的APP實(shí)現(xiàn)了功能切換。
, C' ~1 \: s5 P7 L7 C( q' J" m29 l. q4 M ^/ v$ d0 v
問題2:業(yè)務(wù)APP運(yùn)行后,如何進(jìn)行代碼更新?1 T4 m3 G, f: i( L1 g6 q: [
( X3 V O- R9 f: H: @* \7 p; h7 ^你的理解大體正確:在業(yè)務(wù)APP運(yùn)行期間,IAP應(yīng)用已經(jīng)被“替換”,無法直接從業(yè)務(wù)APP切回到IAP應(yīng)用。4 z7 _, O h J3 r8 @
9 p5 o- G; g3 s) |. ?- i根據(jù)這位粉絲提供的圖片資料現(xiàn)有流程理解:IAP應(yīng)用作用:2 ]# L- t. G# [2 ~: M
IAP程序運(yùn)行后,可以通過串口或其他接口接收新的業(yè)務(wù)APP文件,并將其燒錄到FLASH指定區(qū)域。燒錄完成后,IAP應(yīng)用跳轉(zhuǎn)到業(yè)務(wù)APP的入口,業(yè)務(wù)APP開始運(yùn)行。8 a/ H( q; v- M. [: {9 p
問題描述:( T4 x+ u! L9 w w$ b o, L
在業(yè)務(wù)APP運(yùn)行期間,業(yè)務(wù)APP接管了全部系統(tǒng)資源(如串口等),IAP程序不再運(yùn)行,無法進(jìn)行新業(yè)務(wù)APP的下載和燒錄。如果需要更新APP,只能通過復(fù)位MCU重新啟動(dòng)IAP程序,再次進(jìn)入更新模式。
, h: V: A: }. I, N[/ol]
. M: \/ j# N# Y$ t38 f% Y* |" k- g
要實(shí)現(xiàn)“在業(yè)務(wù)APP運(yùn)行期間,不復(fù)位,更新業(yè)務(wù)APP”的方法
2 y3 z4 j# ?% \' f, M這種需求可以通過設(shè)計(jì)實(shí)現(xiàn),但需要對(duì)程序架構(gòu)進(jìn)行調(diào)整,以下是幾個(gè)常見的解決方案:1 v, n( I2 b( X$ k& @ e
, a; G+ U7 {, U2 Q8 K3 H
1 `9 X3 f. C5 C; O方案1:業(yè)務(wù)APP中集成IAP功能; U+ a, t# n& h" \
在業(yè)務(wù)APP中預(yù)留IAP功能代碼,例如:
7 i6 m. B3 a x, I1 G在業(yè)務(wù)APP運(yùn)行時(shí)監(jiān)聽某個(gè)特殊信號(hào)(如通過串口發(fā)送特定指令);收到信號(hào)后,業(yè)務(wù)APP調(diào)用IAP功能模塊完成新代碼的下載和燒錄;燒錄完成后,直接跳轉(zhuǎn)到新的業(yè)務(wù)APP。! c! a: l. }4 f
) p8 F- m; |+ c( W) J
) u+ ~8 g4 j) |$ z& x1 z優(yōu)點(diǎn):業(yè)務(wù)APP運(yùn)行期間即可完成更新,無需復(fù)位。
+ o. e, P/ D1 g: B3 n: ]% }, }8 x2 Z' e3 h
缺點(diǎn):增加了業(yè)務(wù)APP的復(fù)雜性(需同時(shí)管理業(yè)務(wù)邏輯和IAP邏輯)。
! ?3 c9 ?: @7 s2 N' }! n9 p( M
# t" t- `3 v5 u( U+ D$ u: R" |+ N. B+ h( `/ L0 U
方案2:設(shè)計(jì)IAP與業(yè)務(wù)APP共存
& Z2 C( m" s" X9 y K4 ^ \1 `通過MCU的FLASH分區(qū)管理,讓IAP和業(yè)務(wù)APP同時(shí)存在于不同的區(qū)域,具體做法:1 _1 Q7 F' z& p: v* q
雙區(qū)啟動(dòng)機(jī)制:6 x& {3 I3 V" c8 L! \# ]
IAP程序在啟動(dòng)時(shí)檢測用戶輸入或某個(gè)標(biāo)志位。如果需要更新,進(jìn)入IAP模式接收新APP文件。如果不需要更新,直接跳轉(zhuǎn)到業(yè)務(wù)APP。
) P$ c3 K- j' |+ w業(yè)務(wù)APP的重啟機(jī)制: w! N+ R/ h, o6 G% a
在業(yè)務(wù)APP運(yùn)行期間,監(jiān)聽串口信號(hào),收到更新請(qǐng)求后通過軟件觸發(fā)復(fù)位(或設(shè)置標(biāo)志位并復(fù)位)。復(fù)位后重新進(jìn)入IAP程序完成更新。
$ s3 h L V( u% a- Q& c0 E! Z[/ol]
& ?& S8 u5 E* S$ d. c3 z0 A: `+ x, i3 X
優(yōu)點(diǎn):IAP程序簡單,不會(huì)受到業(yè)務(wù)APP邏輯的影響。
! G! h& \: |/ Y$ I
4 N- b! k) y# n Q0 H3 f6 Q# }5 @缺點(diǎn):仍然需要復(fù)位,但復(fù)位可以由業(yè)務(wù)APP通過軟件觸發(fā)(無須用戶手動(dòng)操作)。
# V+ H# B0 ?# P" K" w# a! l( n% b/ ^/ a3 u. A( i
" U: S) o4 |) B) d
方案3:通過雙備份機(jī)制實(shí)現(xiàn)熱更新4 o7 n6 p) S* T+ U3 N3 s6 O
部分高端MCU支持雙備份機(jī)制,可以實(shí)現(xiàn)“熱更新”,步驟如下:IAP程序負(fù)責(zé)維護(hù)兩個(gè)FLASH區(qū)域,分別存儲(chǔ)當(dāng)前運(yùn)行的APP和待更新的APP;當(dāng)業(yè)務(wù)APP運(yùn)行時(shí),允許IAP程序后臺(tái)燒錄新的APP到備份區(qū)域;燒錄完成后,通過設(shè)置標(biāo)志位通知系統(tǒng)下次啟動(dòng)時(shí)切換到新APP。
/ F3 u' k3 J* C2 x9 E n! x, X' q[/ol]
2 m+ D* ]& a% O. Z+ M/ n$ W優(yōu)點(diǎn):支持后臺(tái)更新,用戶體驗(yàn)更好。& H) x5 H* D: v0 v0 j8 e$ R% h
, d: q$ v% \. i" @% [0 `' b
缺點(diǎn):FLASH容量需求較大,需要支持雙分區(qū)。, h7 @$ a. x* w: i1 m
1fkoexeljw164012790222.jpg (71.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
1fkoexeljw164012790222.jpg
2024-11-23 22:07 上傳
/ U) v( \' L1 n X- l% `. `
ecc2pzkezci64012790322.gif (45.46 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
ecc2pzkezci64012790322.gif
2024-11-23 22:07 上傳
: n2 Z" z0 ?" W: w D2 W
點(diǎn)擊閱讀原文,更精彩~ |
|