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

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

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

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

[復(fù)制鏈接]

563

主題

563

帖子

3385

積分

四級會員

Rank: 4

積分
3385
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-9 08:00:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式

& J9 s3 m" b1 }% A# b6 s點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
# k8 o& z" r2 m/ V$ _- p1 B8 ?裸機(jī)編程確實(shí)可以減少系統(tǒng)復(fù)雜性,提升對資源的掌控能力。
  D. x" E  D8 O, G# T; x
6 L& I! S; n: G$ V+ ^0 n! }1 S3 `( g! l 3 J) Z* _' q0 G$ ]$ v' h
在考慮裸機(jī)編程的架構(gòu)時(shí),可以通過以下幾個(gè)思路構(gòu)建更加健壯和穩(wěn)定的系統(tǒng)。
! n$ g- {# J6 S* {" I1
6 R' K4 n2 z, Z7 O" e模塊化架構(gòu)
. @( z. b8 v/ s* E8 E5 W' K這種架構(gòu)提高了代碼的可讀性和復(fù)用性,并使問題定位更加方便。模塊間的解耦也使得后續(xù)功能擴(kuò)展更加靈活。
6 g: s- t6 w7 M; O
  • 硬件抽象層 (HAL):實(shí)現(xiàn)底層硬件的訪問,包括GPIO、UART、SPI等,所有外設(shè)訪問都通過HAL接口。這種抽象不僅簡化了硬件操作,還便于后續(xù)移植到不同的STM32型號。
  • 驅(qū)動層:在HAL基礎(chǔ)上封裝具體外設(shè)功能,如傳感器驅(qū)動、存儲器驅(qū)動等。每個(gè)驅(qū)動應(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é)。
    , l! l; r* t" P1 z& x% n3 d* a

    4 _4 a; [' `2 b) p' ?, \" R& r2
    2 l1 m: B% [% Q/ d事件驅(qū)動架構(gòu), \! H9 P1 s/ Y4 r. z5 M2 ^5 ^
    這種方法避免了復(fù)雜的中斷嵌套,簡化了調(diào)試過程,并能輕松擴(kuò)展新的事件處理邏輯。4 ?) I: D# x- O( P
  • 使用硬件中斷(如定時(shí)器、UART接收)產(chǎn)生事件,并將這些事件存儲到事件隊(duì)列中。
  • 在主循環(huán)中不斷檢查事件隊(duì)列,處理相應(yīng)的事件。
    5 Y1 U9 w4 k6 f2 W" R

    ! y. ~/ L! j, E' C* _4 ^由于裸機(jī)編程往往缺乏操作系統(tǒng)的調(diào)度功能,可以采用事件驅(qū)動的架構(gòu)來模擬任務(wù)調(diào)度。具體步驟如下:" i+ O+ ]% ^  |7 V/ x# }& w7 y
    [/ol]1 A5 A/ l* s7 `& ]9 i) q2 J$ n4 |$ I
    0 `: ?$ P) w, Q" O
    基于定時(shí)器的調(diào)度機(jī)制
    " r4 w2 O) H0 v0 C1 ?
    1 f0 |) i5 v( a( \: L) Z3 i2 G使用硬件定時(shí)器來模擬簡易的調(diào)度機(jī)制,引入“時(shí)間片”概念。
    $ `. K) `- \! Y* T4 A( P. v  q: U7 B8 i& _
    設(shè)定不同定時(shí)器來觸發(fā)任務(wù),使高優(yōu)先級任務(wù)在更短時(shí)間間隔內(nèi)執(zhí)行,而低優(yōu)先級任務(wù)則被延后處理。8 c/ ?: a  |9 r+ h: t6 D
    8 M; ~! i" O9 r" R8 K' ]/ T, ~9 r) i
    這種機(jī)制有助于降低優(yōu)先級反轉(zhuǎn)的風(fēng)險(xiǎn),確保系統(tǒng)穩(wěn)定運(yùn)行。
    & U7 k/ G" Q. X! p3 `- G: F- j2 e[/ol]
    / C9 h" m& K4 L" T: L1 n* L
    / Y. {5 t8 m$ h. @* D& m: h, A
    有限狀態(tài)機(jī) (FSM)
    ( A5 z" W$ ~; \( U) o" T3 A- d  f$ O
    7 [: M' v2 K  {為每個(gè)模塊設(shè)計(jì)獨(dú)立的狀態(tài)機(jī),并在主循環(huán)中定期輪詢狀態(tài)。
    " o2 k0 w: O; N: F' b/ t. k& x; [' g8 b
    狀態(tài)機(jī)方法清晰地描述系統(tǒng)行為和狀態(tài)轉(zhuǎn)換條件,便于調(diào)試和維護(hù)。
    # h0 H3 Z, L' V& u# h% p2 [! U3 X: e
    ( I! |' B) }) T* i可以使用狀態(tài)表或狀態(tài)圖的方式來描述狀態(tài)及其轉(zhuǎn)換,使得狀態(tài)管理更加直觀。
    . P. [1 `- M, y% |1 p, X[/ol]
    8 I7 z! T/ r* c* r9 E: k, w0 E

    ; j6 z9 ~* a; X# d/ ~- B改進(jìn)調(diào)試方法
    7 z0 u% Z3 s/ F% h6 j" \* t' s3 w2 s: v* P# i) G! q4 [7 Y! i
  • 周期性心跳檢測:通過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等)來捕捉異常,有助于定位問題。- D# u% Q8 `; P) [, r
    [/ol]" N% b- f/ I" ]6 d' W
    3
    * u3 R: f2 l* c( T) `; Q) z& v常見裸機(jī)編程架構(gòu)推薦
    5 X* ^  m9 U7 `, z# t2 E
  • 大循環(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ù)。
    $ P' N  O: }" ?& p* w! H! p

    ! k8 q) n/ t, p& a4. e% z4 d# v* [
    實(shí)踐中的建議
    / W! B7 |* p+ J/ S! _! F6 X3 d5 u
  • 減少全局變量的使用:在裸機(jī)環(huán)境下,避免全局變量引起的競爭問題,使用局部變量或傳遞參數(shù)的方式。
  • 小心使用中斷:控制中斷嵌套深度,中斷函數(shù)應(yīng)保持簡潔快速,盡量避免長時(shí)間占用中斷。
  • 內(nèi)存管理:設(shè)計(jì)好內(nèi)存管理策略,避免動態(tài)內(nèi)存分配帶來的碎片化問題,使用靜態(tài)分配方式盡量確保內(nèi)存使用的高效性。
  • 配置和初始化的分離:將外設(shè)的配置和初始化代碼獨(dú)立為函數(shù),便于管理和復(fù)用。
    + D! ?% G$ J: s# w

    ( Y! u. S" |7 j; P6 q) m7 i. @3 |這些建議和思路可以幫助你快速搭建一個(gè)穩(wěn)健的裸機(jī)編程框架,通過良好的代碼結(jié)構(gòu)和設(shè)計(jì)習(xí)慣減少復(fù)雜性,提高系統(tǒng)的穩(wěn)定性和可維護(hù)性。1 s' @: X" U' E. G
    7 j# G4 m1 E$ h. X6 e

    3 O! U* h& N7 _: K* j4 T點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

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

    本版積分規(guī)則


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