這篇文章很受歡迎:CPU、SoC、MCU什麽區別
MCU(Microcontroller Unit)和SoC(System on a Chip)是兩種不同的嵌入式系統,它們通常執行不同型別的作業系統,具體取決於其套用場景和硬體資源。
-
MCU(Microcontroller Unit):
型別: MCU是一種單一芯片整合了處理器核心、記憶體、外設和其他基本功能的微控制器。
套用場景: 常用於簡單、即時性要求較高的嵌入式系統,例如傳感器控制、嵌入式裝置等。
作業系統: 多數情況下,MCU並不執行傳統的作業系統,而是使用即時作業系統(RTOS)或裸機編程。RTOS可以提供即時性、輕量級的任務排程和事件處理。
SoC(System on a Chip):
型別: SoC是整合了處理器核心、記憶體、外設以及可能的其他處理單元(如GPU、DSP等)的復雜芯片。
套用場景: 通常用於更復雜、多用途的嵌入式系統,例如智慧型手機、嵌入式電腦、嵌入式系統-on-a-chip等。
作業系統: SoC可以執行更復雜的作業系統,包括Linux、Android、FreeRTOS等。具體選擇取決於套用需求和硬體資源。在一些資源有限的情況下,也可以選擇裸機編程或輕量級RTOS。
總的來說,MCU更傾向於在即時性要求高、資源有限的場景下使用RTOS或者裸機編程,而SoC則具有更大的靈活性,可以執行更復雜的作業系統,適用於多用途的嵌入式套用。選擇作業系統的決策通常由具體的套用需求和硬體資源決定。
1、MCU是選擇跑裸機,還是跑RTOS?
選擇MCU跑裸機(Bare-Metal)還是跑RTOS(Real-Time Operating System)取決於具體的套用需求和計畫要求。每種選擇都有其優勢和適用場景。
裸機編程:
-
資源效率: 裸機編程通常更輕量級,不需要額外的作業系統開銷,因此在資源有限的嵌入式系統中可能更為合適。
-
即時性: 對於對即時性要求極高的套用,裸機編程可以提供更精確的控制,因為沒有額外的任務排程和中斷延遲。
-
簡單性: 裸機編程相對簡單,沒有作業系統的復雜性,適合一些簡單的控制套用,如傳感器控制、定時器套用等。
RTOS:
-
多工處理: 如果套用需要同時處理多個任務,RTOS提供了任務排程和管理機制,簡化了多工並行處理。
-
抽象層: RTOS提供了抽象層,簡化了開發者對底層硬體的操作,提高了程式碼的可移植性。
-
易維護性: RTOS可以提高程式碼的可維護性,透過任務劃分和模組化設計,更容易理解和偵錯。
-
時間管理: 對於需要精確的時間管理和處理的套用,RTOS可以提供更可靠的時間管理和排程。
選擇的考慮因素:
-
套用需求: 確定套用的性質和需求,如果是簡單的、即時性要求高的控制任務,裸機編程可能足夠。如果需要處理多個任務或復雜的控制邏輯,RTOS可能更合適。
-
資源限制: 考慮硬體資源的限制,如果MCU資源非常有限,裸機編程可能更為合適。如果有足夠的資源,並且希望簡化開發流程,RTOS可能是一個好的選擇。
-
開發經驗: 開發者對裸機編程或RTOS的經驗也是考慮的因素。對於有經驗的開發者,裸機編程可能更容易上手;而對於復雜的計畫,RTOS提供了更高層次的抽象,可能更容易管理。
最終的選擇應該根據具體計畫的需求、開發者的技能水平以及硬體資源等因素進行權衡。在一些計畫中,也可以結合裸機編程和RTOS的方式,根據具體任務的需求選擇合適的策略。
很多剛畢業進入職場的同學,由於在學校一直開發裸機,所以對RTOS有一點畏懼。其實選擇FreeRTOS這樣的輕量級的RTOS,給你提供了一些「武器」,對於復雜功能的開發,開發難度其實是降低的。
2、為什麽大多數SoC選擇Linux作為作業系統
大多數SoC選擇Linux作為作業系統的原因有多個,其中一些關鍵因素包括:
-
廣泛的支持: Linux是一個開源作業系統,得到了全球廣泛的支持和社群參與。這使得大多數SoC供應商都能夠輕松地為其硬體提供Linux內核和相關驅動程式。
-
豐富的軟體生態系: Linux擁有龐大而豐富的軟體生態系,包括開源工具、庫、應用程式等。這使得開發者能夠更容易地存取和利用各種現有的軟體資源,從而加速應用程式的開發過程。
-
多使用者支持: Linux是一個多使用者、多工的作業系統,適用於需要支持多個使用者同時執行多個任務的嵌入式套用場景。這對於一些復雜的SoC,如智慧型手機、嵌入式電腦等來說是非常重要的特性。
-
強大的網路支持: Linux內核支持豐富的網路協定和功能,適用於需要網路連線的嵌入式系統。這對於連線互聯網、進行遠端管理和數據傳輸的套用非常重要。
-
開放原始碼: Linux的開放原始碼模型使得SoC制造商可以根據自己的需求進行客製和最佳化。這種開放性有助於適應各種硬體架構和滿足不同市場需求。
-
穩定性和可靠性: Linux經過長時間的發展和測試,已經變得非常穩定和可靠。這對於一些對系統穩定性要求較高的套用場景是至關重要的。
-
社群支持和更新: Linux有龐大的社群支持,新的內核版本和修補程式定期釋出,這意味著SoC制造商和開發者可以獲得最新的功能、安全性和效能最佳化。
綜合這些因素,Linux成為了許多SoC的首選作業系統,特別是在需要處理較為復雜的任務、具備豐富的軟硬體生態系、要求網路連線和多使用者支持的場景下。然而,也有一些資源有限或對即時性要求較高的套用場景,可能會選擇其他作業系統、包括安卓或者RTOS。
還有些芯片,主要針對的就是Linux系統的外設,不考慮MCU的外設的場景。比如一些高通的wifi芯片,只支持linux的驅動移植。所以你在沒有芯片廠家支持的前提下,是沒法把它用在非linux的情況的。
3、關於RT-Linux
RT-Linux是一個基於Linux內核的即時作業系統(RTOS),它透過對Linux內核的修改和擴充套件,使其具備即時效能。RT-Linux的目標是在維持Linux的通用性和強大性的同時,提供對即時任務的支持,使得它可以在需要高即時性的套用中使用。
以下是RT-Linux的一些主要特點和介紹:
-
即時性: RT-Linux致力於提供可預測、可控的即時效能。透過引入即時排程器和中斷處理機制,它能夠確保任務在指定的時間內得到執行,滿足即時系統的需求。
-
Linux內核擴充套件: RT-Linux是在Linux內核的基礎上進行擴充套件和修改而來的。它保留了Linux的通用性和豐富的功能,同時增加了即時任務排程器、硬即時中斷等即時特性。
-
即時排程器: RT-Linux引入了即時排程器,允許任務按照優先級和截止時間進行排程。這有助於確保即時任務按時執行,而不受非即時任務的幹擾。
-
硬即時中斷: RT-Linux提供了硬即時中斷機制,以確保對於一些對時間敏感的任務,能夠以極低的延遲進行響應。
-
POSIX相容性: RT-Linux保持了對POSIX標準的相容性,這使得它與許多現有的即時應用程式和開發工具更加相容。
-
開源: RT-Linux是開源軟體,基於GPL授權證釋出。這使得開發者可以自由存取、修改和分發原始碼。
-
適用範圍: RT-Linux適用於需要Linux通用性和即時效能的套用,如工控系統、嵌入式控制系統、通訊系統等。
RT-Linux有幾個主要的版本,其中一些較為知名的版本包括:
-
RTLinux/GPL: 最早的RT-Linux版本,由RTLinux公司(現為Wind River Systems)開發。RTLinux/GPL是一個即時擴充套件模組,透過將即時排程器插入Linux內核,實作硬即時性。
-
RTLinuxFree: 是RT-Linux/GPL的一個開源版本,其目標是提供對Linux內核的即時擴充套件,以增強Linux在即時嵌入式套用中的可用性。
-
RTAI(Real-Time Application Interface): RTAI是一個獨立的即時擴充套件,提供了對Linux內核的即時支持。RTAI與RTLinux有類似的目標,但其實作方式和架構略有不同。
-
Xenomai: Xenomai是一個即時框架,透過在Linux系統上執行一個即時內核(Cobalt)來提供硬即時性。Xenomai不同於RTLinux的內核外掛程式方式,而是在使用者空間執行即時任務。
-
PREEMPT-RT: PREEMPT-RT不是RT-Linux的特定版本,而是一個用於向Linux內核添加搶占性的即時擴充套件。它透過對Linux內核進行修改,引入了更多的搶占性,以提高Linux的即時效能。
這些版本各自有不同的設計和實作方式,開發者在選擇時應根據計畫的需求、硬體平台和個人經驗來確定最適合的版本。當前的即時Linux解決方案領域仍在發展,開發者可以根據計畫的具體情況選擇適當的解決方案。
4、為什麽裸機程式又被稱作前後台
裸機系統通常分成 輪詢系統 和 前後台系統
輪詢系統
輪詢系統即是在裸機編程的時候,先初始化好相關的硬體,然後讓主程式在一個死迴圈裏面不斷迴圈,順序地做各種事情,大概的虛擬碼看下方程式碼塊輪詢系統是一種非常簡單的軟體結構,通常只適用於那些只需要順序執行程式碼且不需要外部事件來驅動的就能完成的事情。在程式碼清單 中,如果只是實作 LED 翻轉,串口輸出,液晶顯示等
這些操作,那麽使用輪詢系統將會非常完美。但是,如果加入了按鍵操作等需要檢測外部訊號的事件,用來模擬緊急報警,那麽整個系統的即時響應能力就不會那麽好了。
前後台系統
相比輪詢系統,前後台系統是在輪詢系統的基礎上加入了中斷。外部事件的響應在中斷裏面完成,事件的處理還是回到輪詢系統中完成,中斷在這裏我們稱為前台,main 函式裏面的無限迴圈我們稱為後台。
在順序執行後台程式的時候,如果有中斷來臨,那麽中斷會打斷後台程式的正常執行流,轉而去執行中斷服務程式,在中斷服務程式裏面標記事件,如果事件要處理的事情很簡短,則可在中斷服務程式裏面處理,如果事件要處理的事情比較多,則返回到後台程式裏面處理。雖然事件的響應和處理是分開了,但是事件的處理還是在後台裏面順序執行的,但相比輪詢系統,前後台系統確保了事件不會遺失,再加上中斷具有可巢狀的功能,這可以大大的提高程式的即時響應能力。在大多數的小型計畫中,前後台系統運用的好。
補充上一次文章釋出後,有非資訊科技專業的朋友問的問題:
5、MCU就是微控制器麽?
MCU(Microcontroller Unit)通常指的是微控制器單元,而微控制器(Microcontroller)通常被稱為微控制器。這兩個術語通常在嵌入式系統領域中被互換使用。
一個微控制器(Microcontroller)是一個整合了處理器核心(CPU)、記憶體(RAM、Flash等)、輸入/輸出介面(I/O)、定時器、計數器、通訊介面等多個功能模組的芯片。微控制器通常被設計用於控制嵌入式系統中的各種任務,如傳感器控制、數據采集、執行特定的控制演算法等。
MCU(Microcontroller Unit)則是一個更廣義的術語,它指的是包含處理器核心、記憶體和外設的整個微控制器系統。在實際使用中,這兩個術語的區別並不是非常嚴格,經常被交替使用,而微控制器更常用於指代嵌入式系統中的微控制器。
前期閱讀
CPU、SoC、MCU什麽區別
國產SoC廠家
一陣腥風血雨的收購之後,MCU哪家強?