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

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

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

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

[復(fù)制鏈接]

563

主題

563

帖子

3385

積分

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

Rank: 4

積分
3385
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-9 08:00:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  K$ M; y: ]; i  f4 y& \
點(diǎn)擊上方藍(lán)色字體,關(guān)注我們) a- I  n, S5 F0 ~% E* o
裸機(jī)編程確實(shí)可以減少系統(tǒng)復(fù)雜性,提升對(duì)資源的掌控能力。
) U5 s# X$ f( v" B- v8 M& s" K4 M1 Z/ n  p% L- B2 V% |4 E2 y' K
# x0 [1 t0 Z" Q  J. M' O7 @
在考慮裸機(jī)編程的架構(gòu)時(shí),可以通過(guò)以下幾個(gè)思路構(gòu)建更加健壯和穩(wěn)定的系統(tǒng)。
3 m( K2 U9 e. J( z1 J17 R( r" O' w' R
模塊化架構(gòu)
! e5 X3 z6 T& `這種架構(gòu)提高了代碼的可讀性和復(fù)用性,并使問(wèn)題定位更加方便。模塊間的解耦也使得后續(xù)功能擴(kuò)展更加靈活。
% {. N: }2 Q9 K' X4 m
  • 硬件抽象層 (HAL):實(shí)現(xiàn)底層硬件的訪問(wèn),包括GPIO、UART、SPI等,所有外設(shè)訪問(wèn)都通過(guò)HAL接口。這種抽象不僅簡(jiǎn)化了硬件操作,還便于后續(xù)移植到不同的STM32型號(hào)。
  • 驅(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)專(zhuān)注于業(yè)務(wù)邏輯,而非硬件細(xì)節(jié)。
    # a/ B' z& M' }5 M* J; u6 y
    $ @# I0 e9 s2 V( x9 \& Z7 ]4 r
    21 ?" t0 ]; \$ ~. m0 ^( N. b2 x! C
    事件驅(qū)動(dòng)架構(gòu)
    . y7 K6 `3 T* v! `  A& b5 Q3 Q這種方法避免了復(fù)雜的中斷嵌套,簡(jiǎn)化了調(diào)試過(guò)程,并能輕松擴(kuò)展新的事件處理邏輯。& E( H5 L  X( V& f
  • 使用硬件中斷(如定時(shí)器、UART接收)產(chǎn)生事件,并將這些事件存儲(chǔ)到事件隊(duì)列中。
  • 在主循環(huán)中不斷檢查事件隊(duì)列,處理相應(yīng)的事件。
      r' ~/ e) r# P

    ( k$ M, o9 f. Y, {由于裸機(jī)編程往往缺乏操作系統(tǒng)的調(diào)度功能,可以采用事件驅(qū)動(dòng)的架構(gòu)來(lái)模擬任務(wù)調(diào)度。具體步驟如下:
    0 S: u: e; ^0 t8 }9 g[/ol]
    0 p7 i. d8 k3 i3 Y# e

    - |; m2 d; q1 {+ b% S. L/ k! C" o基于定時(shí)器的調(diào)度機(jī)制
      ?" Y" p3 y3 p; Y* D% r
    4 d* @8 O' M( H& d. g使用硬件定時(shí)器來(lái)模擬簡(jiǎn)易的調(diào)度機(jī)制,引入“時(shí)間片”概念。  S: w6 W; G8 }! O5 |

    6 S" d) h+ r+ e" [( ~" G設(shè)定不同定時(shí)器來(lái)觸發(fā)任務(wù),使高優(yōu)先級(jí)任務(wù)在更短時(shí)間間隔內(nèi)執(zhí)行,而低優(yōu)先級(jí)任務(wù)則被延后處理。) t; p! j  A) K

    & C/ }& X' t  R這種機(jī)制有助于降低優(yōu)先級(jí)反轉(zhuǎn)的風(fēng)險(xiǎn),確保系統(tǒng)穩(wěn)定運(yùn)行。
    4 M, {  |: T, M- R6 _- T  B5 l, H8 J9 M[/ol]  P  L# J1 f) ^% f3 Y
    ( A1 k) C$ y3 B6 n' a: S
    有限狀態(tài)機(jī) (FSM)
    ' y: ^/ R* L, I# [; |# z$ I6 d/ g- [
    為每個(gè)模塊設(shè)計(jì)獨(dú)立的狀態(tài)機(jī),并在主循環(huán)中定期輪詢(xún)狀態(tài)。
    " R) x6 f/ @. b+ o" _, A0 a# ]6 [  o* P3 I+ w
    狀態(tài)機(jī)方法清晰地描述系統(tǒng)行為和狀態(tài)轉(zhuǎn)換條件,便于調(diào)試和維護(hù)。; Q# G! Y! K+ ?+ g. W9 P
    * _6 {% i* M/ Q3 A
    可以使用狀態(tài)表或狀態(tài)圖的方式來(lái)描述狀態(tài)及其轉(zhuǎn)換,使得狀態(tài)管理更加直觀。% [- W0 ~0 |( \6 S. y" Y% `7 [- F
    [/ol]( E* p4 ~7 \( T" t

    ! Z1 G* `5 |2 e6 v. d改進(jìn)調(diào)試方法* s2 L, c4 X6 w& e% F' |5 x  J

    4 |6 h6 q6 p; w
  • 周期性心跳檢測(cè):通過(guò)LED或串口輸出定期報(bào)告系統(tǒng)狀態(tài),有助于實(shí)時(shí)監(jiān)控系統(tǒng)運(yùn)行情況。
  • 監(jiān)控看門(mén)狗:在系統(tǒng)出現(xiàn)異常時(shí),通過(guò)看門(mén)狗定時(shí)復(fù)位系統(tǒng),避免長(zhǎng)時(shí)間的卡死狀態(tài)。
  • 啟用硬件異常捕獲:利用硬件斷點(diǎn)、錯(cuò)誤向量捕獲(如HardFault、MemManage等)來(lái)捕捉異常,有助于定位問(wèn)題。
    & r) |6 ^+ l$ Q1 ^: `
    [/ol]# g% K# d7 E3 e8 e% ]+ i
    3- y* \. n. P5 J/ g: f1 Q
    常見(jiàn)裸機(jī)編程架構(gòu)推薦3 [% [; f5 J5 c# y& |
  • 大循環(huán) + 中斷 (Super Loop + Interrupts):適用于功能不復(fù)雜、任務(wù)較少的場(chǎng)景。中斷中僅進(jìn)行事件標(biāo)記或簡(jiǎn)單數(shù)據(jù)采集,具體任務(wù)在主循環(huán)中處理。
  • 事件隊(duì)列架構(gòu):事件隊(duì)列設(shè)計(jì)提升系統(tǒng)響應(yīng)性,適用于任務(wù)較多或時(shí)間要求較高的系統(tǒng)。
  • 時(shí)間片輪詢(xún)架構(gòu):適合有多個(gè)定時(shí)性任務(wù)的場(chǎng)景,通過(guò)時(shí)間片調(diào)度不同的任務(wù)。4 b3 Y2 q  R; K; _3 R" q

    ) w4 q% B* a- Y5 o4
    / a# z+ P0 i1 S實(shí)踐中的建議9 k) e# r  Q" l" a( [& u# k* {
  • 減少全局變量的使用:在裸機(jī)環(huán)境下,避免全局變量引起的競(jìng)爭(zhēng)問(wèn)題,使用局部變量或傳遞參數(shù)的方式。
  • 小心使用中斷:控制中斷嵌套深度,中斷函數(shù)應(yīng)保持簡(jiǎn)潔快速,盡量避免長(zhǎng)時(shí)間占用中斷。
  • 內(nèi)存管理:設(shè)計(jì)好內(nèi)存管理策略,避免動(dòng)態(tài)內(nèi)存分配帶來(lái)的碎片化問(wèn)題,使用靜態(tài)分配方式盡量確保內(nèi)存使用的高效性。
  • 配置和初始化的分離:將外設(shè)的配置和初始化代碼獨(dú)立為函數(shù),便于管理和復(fù)用。
    & j5 Z- o6 r( J' T7 I( D" f0 u
    1 Z  l1 b6 P( E' e- f
    這些建議和思路可以幫助你快速搭建一個(gè)穩(wěn)健的裸機(jī)編程框架,通過(guò)良好的代碼結(jié)構(gòu)和設(shè)計(jì)習(xí)慣減少?gòu)?fù)雜性,提高系統(tǒng)的穩(wěn)定性和可維護(hù)性。, S* j- \7 D+ n$ J/ X0 G% X; @7 v
    - Z* U  K3 w- J/ u2 _

      p, @$ p& t$ l" t點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


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