電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 44|回復(fù): 0
收起左側(cè)

粉絲學(xué)習(xí)STM32 IAP升級(jí)遇到的問題

[復(fù)制鏈接]

660

主題

660

帖子

4567

積分

四級(jí)會(huì)員

Rank: 4

積分
4567
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-19 08:01:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
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

! V' C, O& f8 n( P$ r$ \6 T% a) R% B- n5 c6 [  m

! 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 z
    0 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

    / U) v( \' L1 n  X- l% `. ` : n2 Z" z0 ?" W: w  D2 W
    點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表