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

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

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

有沒有適用于STM32的裸機(jī)編程架構(gòu)或思路?

[復(fù)制鏈接]

563

主題

563

帖子

3385

積分

四級會(huì)員

Rank: 4

積分
3385
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-9 08:00:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
. Q0 O9 q$ k. l' Y0 h1 r
點(diǎn)擊上方藍(lán)色字體,關(guān)注我們) s( L) `) h* V' z; \# u) y( D
裸機(jī)編程確實(shí)可以減少系統(tǒng)復(fù)雜性,提升對資源的掌控能力。2 n! F. b) }6 `
' a5 C& W: w) N. s4 _& g8 C& I: u

8 f* z2 c! ^( k( v- @* G9 d, z在考慮裸機(jī)編程的架構(gòu)時(shí),可以通過以下幾個(gè)思路構(gòu)建更加健壯和穩(wěn)定的系統(tǒng)。; F* ^: Q  u, P- f0 t1 Y# o
12 f. i( A! F/ B- v' s2 ~7 p
模塊化架構(gòu): A0 M5 |1 o0 z# }, A! Z2 a
這種架構(gòu)提高了代碼的可讀性和復(fù)用性,并使問題定位更加方便。模塊間的解耦也使得后續(xù)功能擴(kuò)展更加靈活。8 c# g! s9 z! k8 _
  • 硬件抽象層 (HAL):實(shí)現(xiàn)底層硬件的訪問,包括GPIO、UART、SPI等,所有外設(shè)訪問都通過HAL接口。這種抽象不僅簡化了硬件操作,還便于后續(xù)移植到不同的STM32型號。
  • 驅(qū)動(dòng)層:在HAL基礎(chǔ)上封裝具體外設(shè)功能,如傳感器驅(qū)動(dòng)、存儲(chǔ)器驅(qū)動(dòng)等。每個(gè)驅(qū)動(dòng)應(yīng)盡量獨(dú)立,遵循單一責(zé)任原則。
  • 服務(wù)層:提供常用功能的中間層,如定時(shí)器服務(wù)、事件調(diào)度器等。服務(wù)層可以幫助處理通用任務(wù),減少應(yīng)用層的復(fù)雜性。
  • 應(yīng)用層:實(shí)現(xiàn)最終的應(yīng)用邏輯。應(yīng)用層應(yīng)專注于業(yè)務(wù)邏輯,而非硬件細(xì)節(jié)。# w8 \0 q: @) y6 t, x6 y! x* ]; ?6 y( o

    " [* ?: a  J$ x/ H8 D  Z2
    9 I7 x3 P) f+ c5 r) t" i1 c( U事件驅(qū)動(dòng)架構(gòu)- K' p) p# Q2 l4 o, k+ s4 Z$ Q
    這種方法避免了復(fù)雜的中斷嵌套,簡化了調(diào)試過程,并能輕松擴(kuò)展新的事件處理邏輯。
    ) e( `4 R; t) @7 t9 n: F
  • 使用硬件中斷(如定時(shí)器、UART接收)產(chǎn)生事件,并將這些事件存儲(chǔ)到事件隊(duì)列中。
  • 在主循環(huán)中不斷檢查事件隊(duì)列,處理相應(yīng)的事件。) q4 {# y: I6 u2 L3 W0 a' g+ J

    - T. l7 L& }7 r5 u; o+ o. n由于裸機(jī)編程往往缺乏操作系統(tǒng)的調(diào)度功能,可以采用事件驅(qū)動(dòng)的架構(gòu)來模擬任務(wù)調(diào)度。具體步驟如下:
    ' Q$ m! K. x, C6 v4 i! J$ N1 D9 t$ z[/ol]
    4 o0 P: X2 K* g

    . ~+ u6 z0 I  z+ I6 `& Q3 y基于定時(shí)器的調(diào)度機(jī)制: ]/ C8 ]4 x: T& H1 Q

    $ X$ K6 y7 i7 S& d9 o使用硬件定時(shí)器來模擬簡易的調(diào)度機(jī)制,引入“時(shí)間片”概念。
    : o3 E# y) o0 n  W" e5 x& b( }$ W
    設(shè)定不同定時(shí)器來觸發(fā)任務(wù),使高優(yōu)先級任務(wù)在更短時(shí)間間隔內(nèi)執(zhí)行,而低優(yōu)先級任務(wù)則被延后處理。
    ; t# E+ C7 e) X7 W% s  C
    $ _" ~) b% h# P, W- q這種機(jī)制有助于降低優(yōu)先級反轉(zhuǎn)的風(fēng)險(xiǎn),確保系統(tǒng)穩(wěn)定運(yùn)行。
    # B$ B' T' ?+ ^, R% z[/ol]( L5 Z& l% L# W

    % {, X  t$ ^9 A  z  N  p  k/ H有限狀態(tài)機(jī) (FSM)5 `" t# C7 f. _" N5 `6 b2 J& Q% I
    4 G2 N4 y7 `) z7 S4 O- m, a) Y8 d
    為每個(gè)模塊設(shè)計(jì)獨(dú)立的狀態(tài)機(jī),并在主循環(huán)中定期輪詢狀態(tài)。
    2 P# j( u  r7 m9 f3 u* J; k& S) d+ C% g. z) m. g) O) }. V0 i3 ~: X0 d
    狀態(tài)機(jī)方法清晰地描述系統(tǒng)行為和狀態(tài)轉(zhuǎn)換條件,便于調(diào)試和維護(hù)。
    * ?/ N! g& @* X6 y- A; S
    ' R+ r- p' E' d& Q; k可以使用狀態(tài)表或狀態(tài)圖的方式來描述狀態(tài)及其轉(zhuǎn)換,使得狀態(tài)管理更加直觀。7 S1 Z9 ^! e# q% U% ?
    [/ol]( l; k: ^& x& T' K! |: T

    9 f7 R  w" o& G$ S" T! D改進(jìn)調(diào)試方法
    * v+ Y4 p4 o4 [) J  ^( x# g+ U
    , S. @, c3 u0 v( B' f' c
  • 周期性心跳檢測:通過LED或串口輸出定期報(bào)告系統(tǒng)狀態(tài),有助于實(shí)時(shí)監(jiān)控系統(tǒng)運(yùn)行情況。
  • 監(jiān)控看門狗:在系統(tǒng)出現(xiàn)異常時(shí),通過看門狗定時(shí)復(fù)位系統(tǒng),避免長時(shí)間的卡死狀態(tài)。
  • 啟用硬件異常捕獲:利用硬件斷點(diǎn)、錯(cuò)誤向量捕獲(如HardFault、MemManage等)來捕捉異常,有助于定位問題。
    : {' c/ k8 P8 x4 z7 F
    [/ol]( O& v" ?! N6 b  V
    3' h! S5 j+ o. r0 r# y: }7 F0 U
    常見裸機(jī)編程架構(gòu)推薦! {, y+ W1 F0 a  t- [
  • 大循環(huán) + 中斷 (Super Loop + Interrupts):適用于功能不復(fù)雜、任務(wù)較少的場景。中斷中僅進(jìn)行事件標(biāo)記或簡單數(shù)據(jù)采集,具體任務(wù)在主循環(huán)中處理。
  • 事件隊(duì)列架構(gòu):事件隊(duì)列設(shè)計(jì)提升系統(tǒng)響應(yīng)性,適用于任務(wù)較多或時(shí)間要求較高的系統(tǒng)。
  • 時(shí)間片輪詢架構(gòu):適合有多個(gè)定時(shí)性任務(wù)的場景,通過時(shí)間片調(diào)度不同的任務(wù)。
    6 q8 }; ?. t$ E# i

    ) |3 L5 y0 Q$ l1 W( F4$ \* Y3 s9 u7 o4 P% S
    實(shí)踐中的建議, }# H# w! V; \2 o
  • 減少全局變量的使用:在裸機(jī)環(huán)境下,避免全局變量引起的競爭問題,使用局部變量或傳遞參數(shù)的方式。
  • 小心使用中斷:控制中斷嵌套深度,中斷函數(shù)應(yīng)保持簡潔快速,盡量避免長時(shí)間占用中斷。
  • 內(nèi)存管理:設(shè)計(jì)好內(nèi)存管理策略,避免動(dòng)態(tài)內(nèi)存分配帶來的碎片化問題,使用靜態(tài)分配方式盡量確保內(nèi)存使用的高效性。
  • 配置和初始化的分離:將外設(shè)的配置和初始化代碼獨(dú)立為函數(shù),便于管理和復(fù)用。
      a8 e0 Y/ p+ l3 s+ A0 u; Z
    ! R, t8 ^  t4 [1 h: g  M
    這些建議和思路可以幫助你快速搭建一個(gè)穩(wěn)健的裸機(jī)編程框架,通過良好的代碼結(jié)構(gòu)和設(shè)計(jì)習(xí)慣減少復(fù)雜性,提高系統(tǒng)的穩(wěn)定性和可維護(hù)性。
    ) X6 x0 z: o) a/ C; D& ~* j( l 7 t% |) t  j9 v- O! V

    : j8 e, v+ z  K. Z0 v. N7 F點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


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