嵌入式裸機設計--MCU常用裸機架構有哪些?

為什么是裸機設計

792125321入群學習更高效!

在MCU(微控制器單元)裸機開發中,我們常見的架構設計主要圍繞如何高效管理資源和任務調度。認識這些開發方式,對我們開發一個小型項目來說及有好處!

下面介紹一下幾種常用的裸機架構及其特點:

1. ?超級循環(Super Loop)?

  • ?原理:程序通過一個無限循環(while(1))不斷輪詢任務。這也是我們最為熟悉的開發方式!

  • ?特點:

  • 簡單易實現,適合小型項目。

  • 任務按順序執行,實時性差,高優先級任務可能被阻塞。

  • 無搶占機制,依賴任務主動釋放CPU。

  • ?適用場景:簡單控制任務(如LED閃爍、按鍵檢測)。

核心:中斷快速響應,主循環處理非實時任務。

例子:

?

?

運行過程:像流水線工人,永遠重復三個動作:看一眼按鍵 → 調一下LED亮度 → 發會兒呆 → 再從頭開始。

?

缺點:發呆時會卡住,不能同時做其他事(比如發呆時按鍵可能漏檢查)。

2. ?前后臺系統(Foreground-Background)?

  • ?原理:

  • ?前臺:由中斷服務程序(ISR)處理緊急任務(如外部事件)。

  • ?后臺:主循環處理非實時任務(如數據處理、狀態更新)。

  • ?特點:

  • 中斷響應快,適合異步事件處理。

  • 后臺任務仍可能被中斷打斷,需注意資源共享問題(如使用臨界區)。

例子:

?

?

運行過程:

?

  • ?急診:按鍵按下時,中斷立刻標記“有人按了”(不處理,只記下來)。

  • ?門診:主循環看到標記后,慢慢處理按鍵,然后繼續做雜活。 優點:急診響應快,雜活不耽誤。

  • ?適用場景:需要快速響應外部中斷的應用(如傳感器觸發、通信接收)。

核心:順序執行,無優先級,阻塞式延時。

?

3. ?狀態機(State Machine)?

  • ?原理:將任務分解為多個狀態,通過狀態轉移邏輯控制流程。

  • ?實現方式:

  • switch-case 結構或函數指針跳轉。

  • 可能結合查表法(Lookup Table)提高效率。

  • ?特點:

  • 邏輯清晰,適合復雜流程(如協議解析、多步驟控制)。

  • 需合理設計狀態遷移條件,避免死鎖。

  • ?適用場景:通信協議(UART、SPI)、多階段控制(如電機啟動流程)。

核心:狀態遷移由事件或條件觸發,邏輯清晰。

例子:

?

?

運行過程:像交通燈,按規則切狀態:

?

  • 默認關 → 按下按鍵切到閃爍 → 閃夠時間切到常亮 → 保持常亮。 優點:邏輯清晰,適合多步驟流程(比如洗衣機:加水→洗衣→脫水)。

?

4. ?時間片輪轉調度(Time-Sliced Scheduling)?

  • ?原理:利用定時器中斷劃分時間片,依次執行多個任務。

  • ?特點:

  • 偽并行多任務,任務切換由定時器觸發。

  • 任務執行時間需短于時間片,否則可能阻塞其他任務。

  • 需平衡時間片長度和任務實時性。

  • ?適用場景:周期性任務(數據采集、顯示刷新)。

核心:定時器劃分時間片,任務按片切換。

例子:

?

?

運行過程:像媽媽做飯,定時切換任務:

?

  • 前10秒炒菜 → 后10秒煮湯 → 再切回炒菜 → 循環… 優點:假裝“同時”做多件事,適合周期性任務(如每隔1秒讀傳感器)。

?

5. ?事件驅動架構(Event-Driven)?

  • ?原理:任務由事件觸發(如中斷、消息隊列),而非輪詢。

  • ?實現方式:

  • 中斷標記事件,主循環檢查事件標志并執行回調函數。

  • 可能使用事件隊列管理多個事件。

  • ?特點:

  • 低功耗設計(可進入休眠模式等待事件)。

  • 需處理事件優先級和沖突。

  • ?適用場景:低功耗設備(如電池供電的IoT設備)。

核心:事件觸發任務,無事件時休眠省電。

例子:

?

?

運行過程:像保安值班,平時睡覺 → 有事(比如報警)就處理 → 處理完繼續睡。 優點:省電!適合電池設備(如無線門磁傳感器)。

?

?

6. ?協作式調度(Cooperative Scheduling)?

  • ?原理:任務主動釋放CPU控制權(如調用yield()),讓其他任務運行。

  • ?特點:

  • 無搶占,依賴任務協作,實時性一般。

  • 避免資源競爭,適合單線程環境。

  • ?適用場景:任務間依賴性較強的應用(如順序執行的數據處理鏈)。

架構選擇建議

  • ?簡單任務:超級循環或狀態機。

  • ?實時響應:前后臺系統 + 中斷。

  • ?多任務偽并行:時間片輪轉或事件驅動。

  • ?低功耗需求:事件驅動 + 休眠模式。

  • ?復雜邏輯:狀態機分層設計(如Harel狀態機)。

核心:任務通過yield()主動讓出CPU,實現協作切換。

例子:

?

?

運行過程:像兩人合作搬磚:

?

  • A搬幾塊 → 喊“換人!” → B接著搬 → 再換A… 優點:任務自己控制節奏,適合配合型工作流(如先讀數據再處理)。

這些架構可單獨使用或組合(如“時間片輪轉 + 狀態機”),具體取決于項目需求和資源限制。裸機開發的核心是平衡實時性、復雜度和資源開銷。

題外話:

裸機編程在嵌入式開發中始終是優先考慮的方案,其核心優勢在于極致的精簡與高效。它直接操作硬件,無需操作系統(OS)中間層,使得資源占用近乎為零——所有內存和算力都可投入業務邏輯,尤其適合資源有限的低端MCU(如STM32F0系列或51單片機)。

此外,裸機程序通過中斷和輪詢的組合,能夠實現硬實時響應,例如電機控制或傳感器數據采集的微秒級延遲,這對工業設備等高精度場景至關重要。開發層面,裸機代碼結構簡單,調試透明,無需學習復雜的OS API,開發周期短且維護成本低,尤其適合功能單一的小型項目。

然而,裸機的局限性在復雜系統中逐漸顯現。當系統需并行處理多任務(如同時運行通信協議解析、用戶界面刷新和實時控制)時,裸機需手動管理狀態機和事件隊列,代碼復雜度陡增,可維護性下降。此外,協作式任務調度依賴開發者自行實現,若任務間存在強依賴或資源競爭,容易引發邏輯漏洞或優先級反轉問題。例如,智能家居中控需要同時處理藍牙連接、觸摸屏交互和云端同步,僅靠裸機開發會顯著增加協調成本。

此時,實時操作系統(RTOS)的價值得以體現。RTOS提供任務調度、同步機制(如信號量、消息隊列)和內存管理,能優雅處理多任務并行與資源競爭。例如,在無人機飛控系統中,RTOS可確保姿態計算、傳感器融合和電機驅動等任務按優先級精確調度,避免手動調度導致的時序錯亂。同時,RTOS的模塊化設計提升了代碼可復用性,適合大型團隊協作開發。

盡管如此,多數嵌入式場景仍推薦裸機優先。據統計,超過70%的嵌入式應用(如智能門鎖、溫控器、小型傳感器)僅需實現有限功能,裸機開發完全可滿足需求。RTOS的引入意味著至少4-8KB的RAM/ROM開銷及額外的CPU負載,對成本敏感的量產項目而言,這些資源本可用于提升功能或降低硬件規格。嵌入式開發的黃金法則是“用最少資源解決問題”——在滿足實時性和功能需求的前提下,裸機不僅能降低BOM成本,還能減少系統潛在風險(如RTOS內核漏洞)。因此,除非面臨多任務強實時、高復雜度或長期迭代需求,否則裸機仍是更優解

?

總結

?“如無必要,勿增實體”? —— 裸機是嵌入式開發的第一性原理,能用裸機實現的功能,絕不上RTOS。復雜度留給代碼,簡單留給系統。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73551.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python內置函數sum的用法

知識點 - sum 函數 基本語法 sum(iterable[, start]) iterable 是一個可迭代對象,例如列表、元組、集合等,其中的元素通常是數字類型(整數或浮點數)。 start 是一個可選參數,表示累加的起始值,默認為 0。…

編程語言的幾種常見的分類方法

一、 按照編程范式分類 命令式編程語言 強調通過語句來改變程序狀態,如 C、Pascal、Fortran 等。 面向對象編程語言 基于對象和類的概念,支持封裝、繼承和多態,如 Java、C、Python、Ruby 等。 函數式編程語言 注重不可變性和純函數&#xf…

基于DeepSeek×MWORKS 2025a的ROM Builder自動化降階實戰

一、引言 當前,工業仿真領域正經歷著前所未有的「智能焦慮」——當自動駕駛算法已能理解城市路網,當大模型開始設計蛋白質結構,這個驅動大國重器研發的核心領域,卻仍在與千萬級方程組成的龐雜模型艱難博弈。傳統仿真降階如同在數…

配置單區域OSPF實驗和報文抓包和分析

一、配置單區域OSPF概念: (1)配置單區域OSPF(Open Shortest Path First)是一種常見的動態路由協議配置方式,主要用于在同一區域內實現路由信息的交換和路由表的更新。 (2)OSPF是一…

巴耶赫利專業俄語外貿網站建設

巴耶赫利是專業俄語外貿網站建設與俄語搜索引擎Yandex SEO優化服務商。巴耶赫利致力于幫助中國品牌出海俄羅斯,打開俄羅斯市場,提升品牌在俄羅斯的知名度和美譽度。 以下是對巴耶赫利相關服務的詳細介紹: 一、巴耶赫利專業俄語外貿網站建設…

Netty基礎—6.Netty實現RPC服務三

大綱 1.RPC的相關概念 2.RPC服務調用端動態代理實現 3.Netty客戶端之RPC遠程調用過程分析 4.RPC網絡通信中的編碼解碼器 5.Netty服務端之RPC服務提供端的處理 6.RPC服務調用端實現超時功能 5.Netty服務端之RPC服務提供端的處理 (1)RPC服務提供端NettyServer (2)基于反射…

路由器與防火墻配置命令

路由器與防火墻配置命令 小明啊,你不是學計算機的嘛,叔叔家的路由器壞了,可以過來幫叔叔看看嗎 命令可以用縮寫,造就一堆容易造成歧義的縮寫,比如add是address的縮寫,sh是shutdown的縮寫。 默認為Cisco路…

Go語言進化之旅:從1.18到1.24的語法變革

文章目錄 里程碑變革:泛型支持Go 1.18:泛型的引入Go 1.19-1.21:泛型的完善Go 1.24:泛型類型別名全面支持 循環與迭代的進化Go 1.22:循環變量作用域變化與整數遍歷Go 1.23:迭代器函數的支持Go 1.24&#xff…

發現一個GoVCL的問題

之前用govcl寫了一個服務端的界面程序,用來控制服務的開啟和關閉。 由于這個服務程序運行的時間比較長,經常是掛著在服務器上24小時不間斷運行。 后來經過調試發現,govcl的界面按鈕控件,在程序長時間運行后,會出現無法…

34個適合機械工程及自動化專業【論文選題】

論文選題具有極其重要的意義,它直接關系到論文的質量、價值以及研究的可行性和順利程度。選題明確了研究的具體領域和核心問題,就像給研究旅程設定了方向和目的地。例如,選擇 “人工智能在醫療影像診斷中的應用” 這一選題,就確定…

電腦實用小工具--VMware常用功能簡介

一、創建、編輯虛擬機 1.1 創建新的虛擬機 詳見文章新創建虛擬機流程 1.2 編輯虛擬機 創建完成后,點擊編輯虛擬機設置,可對虛擬機內存、處理器、硬盤等各再次進行編輯設置。 二、虛擬機開關機 2.1 打開虛擬機 虛擬機創建成功后,點擊…

雙指針算法專題之——有效三角形的個數

文章目錄 題目介紹思路分析AC代碼 題目介紹 鏈接: 611. 有效三角形的個數 思路分析 如果判斷三個數能否構成一個三角形,相信大家都知道: 只要任意兩邊之和大于第三邊即可。 比如三條邊長度為a,b,c 那只要滿足 ab>c ac>b b…

Linux內核實時機制27 - RT調度器10 - RT throttling 帶寬控制下

文章目錄 1、初始化帶寬 init_rt_bandwidth1.1、init_rt_bandwidth2、定時器處理2.1、sched_rt_period_timer2.2、do_sched_rt_period_timer3、總結1、初始化帶寬 init_rt_bandwidth rt_runtime : 一個時間周期內的運行時間,超過則限流,默認值為0.95ms 1、init_rt_bandwidth…

1.5[hardware][day5]

Link類跳轉指令可以拆分為兩個部分,一個是跳轉,即下一個PC的生成,如果將分支條件的比較放到譯碼級來進行,則這部分只涉及取值級和譯碼級流水;另一個是Link操作,簡單來說就是寫寄存器,這部則主要…

Tomcat 與 Java 環境變量配置簡明教程

Tomcat 與 Java 環境變量配置簡明教程 一、Tomcat 環境變量配置 1. 確認安裝路徑 假設 Tomcat 安裝在:D:\Tomcat\apache-tomcat-9.0.70 2. 設置 CATALINA_HOME 步驟: 右鍵點擊「此電腦」→「屬性」點擊「高級系統設置」→「環境變量」在「系統變量…

3.16學習總結

學習了Java的知識點 基本數據類型 byte占1字節,儲存范圍-128~127 short占2字節,儲存范圍-32768~32767 int占4字節,儲存范圍-2147483648~2147483647 long占8字節,儲存范圍是-9223372036854775808~9223372036854775807 float占…

Android手機中各類安全相關知識總結

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 1. Android 安全威脅2. Android 安全防護措施3. Android 安全建議和最佳實踐4. Android 安全工具推薦5. Android 安全常見問題5.1 如何檢測設備是否感染惡意軟件?5.2 如何防止應用濫用權限?5.3 如何保護設備免受網絡攻…

【Ratis】項目總覽

Apache Ratis 項目源碼分析與運行原理 Apache Ratis 是一個高性能、可擴展的分布式一致性協議實現,是對Raft協議的Java版本的很好的工程實現。它提供了靈活的 API 和多種傳輸層支持(如 gRPC 和 Netty),適用于構建分布式系統中的核心組件,例如分布式存儲、配置管理和服務發…

以太網 MAC 幀格式

文章目錄 以太網 MAC 幀格式以太網幀間隔參考 本文為筆者學習以太網對網上資料歸納整理所做的筆記,文末均附有參考鏈接,如侵權,請聯系刪除。 以太網 MAC 幀格式 以太網技術的正式標準是 IEEE 802.3,它規定了以太網傳輸數據的幀結…

pycharm配置鏡像源【pycharm最新版(23.2.5及以上)方法】

經常遇到pycharm中無法安裝或者安裝慢的問題,糾結了好久,終于找到這個解決辦法了。 為什么要配置鏡像源: 因為Python的包管理工具pip一般從PyPI(Python Package Index)下載安裝包,但是PyPI位于國外&#x…