Featured image of post 常見 Real-Time OS 介紹與比較

常見 Real-Time OS 介紹與比較

比較常見的幾種RTOS

介紹

即時作業系統(Real-Time Operating System, RTOS)是一種專門為即時(real-time)應用而設計的作業系統,強調「在特定時間限制內(deadline)對事件進行回應」,試想一個情境在工業的領域若機器某部分突然產生故障,需要在極短的時間內停止所有馬達的運作,若此時使用的是傳統的作業系統如Linux,依OS內核的調度策略,最終馬達停止的動作會有些許延遲,相較之下RTOS則可以有較彈性的執行緒搶佔,讓緊急情況的處理可以更快被執行

本質上來說RTOS的內核使用起來的效果是大同小異的,基本上能做到多個執行緒的建立、輪詢執行、優先序搶佔、互斥鎖、內核級的中斷等功能,進階一點的則有可以動態記憶體管理、多核心的支援,這些RTOS主要的差異大多是在外圍模組的支援、周邊的開發生態系等,以下就分別介紹目前主流常見的幾種RTOS:

FreeRTOS

FreeRTOS 是由 Real Time Engineers Ltd. 及 Amazon 維護,完全開源並且在全球廣受使用,FreeRTOS 可以說是最最最常見的一種RTOS,成功之道大概在於早早就開源,早早就被各家IDE整合,各家晶片的SDK也都可以看到他的影子,我最早接觸他是在Arduino IDE,FreeRTOS早早就出現在Arduino library list中,使用起來也夠簡單,沒有什麼複雜的設定,加一兩行code就可以實現多執行緒,讓初學者很容易就可以踏入RTOS的世界。他背後的金主爸爸是 Amazon,後來也整合了不少 AWS 上IoT相關的功能,由於早早就開源,周圍的模組也不少。

AzureRTOS (Threadx)

ThreadX 是由 Express Logic 開發的即時作業系統(RTOS),後續被 Microsoft 收購並推出更名版本 AzureRTOS 並開源,從名字就可以看出來未來應該是要跟微軟的 Azure 搭配做一些IoT的功能,但目前好像還沒看到什麼殺手級的應用。由於開源的時間比較晚,周圍的套件比較少,像BLE、Wifi這類的Stack能用的東西好像比較少,但相信有微軟原生的支援應該可以成長的很快,我會碰到 AzureRTOS 是因為 STM32 官方原生支援 AzureRTOS,很有趣的是 STM32 的開發環境也有支援 FreeRTOS,但支援度是遠遜於 AzureRTOS 的。

Zephyr

Zephyr 是由 Linux 基金會(Linux Foundation)主導的開源即時作業系統(RTOS),Zephyr雖然出現很久了,但算是這幾年才突然紅起來,主打一個跨平台的相容性和完整的開發工具鏈,有像是West這種很好用的工具、也有像是DeviceTree者種為跨平台設計的架構,可以說要用Zephyr就要連著這一整串工具鏈一起用才會好用,不過好像也是因為綁著工具鏈跟相容性的原因,好像各家晶片雖然說有支援,但好像又支援的沒那麼好,特別是牽涉到很底層的硬體設定(像時鐘樹設定)就會變的特別麻煩,如果沒有這種需求就蠻好用的,很多設定、初始化都幫你省略了。會碰到Zephyr是因為使用 Nordic 的藍牙 SoC,最新的的 nrf connect SDK 基本上是建立在 Zephyr 上的,而 Zephyr 通訊相關的套件也很完整,很適合給 Nordic 的晶片用。

RT-Thread

RT-Thread 是一款由中國團隊主導開發的開源即時作業系統(RTOS),在中國的嵌入式系統開源社群算蠻熱門的,對中國製MCU(特別是一些RISC-V的晶片)支援度很好,但其他地方就比較少看到有人在用,跟Zephyr一樣也有蠻多工具可以使用,我自己還沒有用過,但讓我印象深刻的是RT-Thread社群有一個可以一鍵生成 STM32 bootloader 的工具,不過要使用要註冊帳號,而且還限定用中國的電話才能註冊…,就對中國以外的開發者不是很友好。

比較

幾種RTOS的差別

名稱AzureRTOS (ThreadX)FreeRTOSZephyrRT-Thread
維護者- 原為 Express Logic 開發,現由 Azure (Microsoft) 管理
- 被微軟購買後開源
- AWS(Amazon)及大社群共同維護
- 開源專案,有廣大社群支援
- 由 Linux Foundation 托管
- 眾多主要產業贊助商與貢獻者(如 Intel、Nordic 等)
- 中國嵌入式廠商與RT-Thread 社群
授權- MIT 授權 (開源版本)- MIT 授權
- 完全開源、商業可使用
- Apache 2.0 授權
- 完全開源
- LGPL 授權
- 可商業使用,但需遵守 LGPL 條款
主要特色- 小巧的記憶體佔用
- 高效能可搶先式多工
- 整合除錯功能、其他外設控制模組
- 模組化設計,可高度客製化內核
- 協同式及可搶先式多工
- 詳細文件與巨大社群,支援度高
- 跨平台相容性好
- 追蹤與分析工具完善
- 與 Percepio Tracealyzer 整合
- 輕量化設計與微核心架構
- 效率高,啟動速度快
- 著重模組化與易用性
使用門檻- 門檻中
- 提供專門的 API 與工具鏈
- 原生支援STM32,其他晶片支援則較少
- 門檻低
- 文件全面且社群龐大
- 新手上手相對容易,維護成本低
- 門檻高
- 須熟悉成套的開發工具鏈
- 社群與企業資源豐富,難度取決於應用深度
- 門檻中
- 設計較為精簡易懂
- 模組化讓功能可彈性擴充,但仍需對 RTOS 原理有基礎理解
社群與生態- 因 Microsoft Azure 加持,工業界支持度高
- 開源時間較晚,社群支援相較少
- 擁有極為廣泛的使用者社群
- 豐富的第三方套件與論壇資源
- 企業和開源社群雙管齊下
- 大型廠商投入資源開發並提供硬體支援
- 文件與套件工具逐漸成熟
- 亞洲市場擁有極大用戶基礎
- 社群不斷壯大,第三方資源也逐年提升
適用範圍- 消費電子、工業設備
- 高度資源受限或需要高效能的應用
- 廣泛用於各類微控制器與嵌入式裝置
- 適合中小型專案或原型開發
- 高度跨平台相容性的產品
- 需要整合多種通訊協定的裝置
- 小型物聯網裝置、家電產品、工業控制等
- 適合資源有限且需高即時性的情境
範例- 高度整合 SoC 平台
- 網路裝置、醫療器械、消費性電子設備
- 資源特別有限但需穩定度的系統
- 物聯網邊緣設備
- 小型感測器、可攜式產品
- 工業自動化控制
- 高速通訊設備
- 需要完整追蹤與調試能力的工業設備
- 精密儀器及高可靠度應用
- 嵌入式微控制器
- 智能家居與可穿戴式裝置
- 需要快速啟動、高效率排程的場景

內核功能層面的差異

名稱AzureRTOS (ThreadX)FreeRTOSZephyrRT-Thread
內核架構- 輕量級、模組化設計
- 單核心即時系統
- 提供 preemption-threshold
- 單核心設計
- 透過設定檔自由啟用/停用功能
- 針對 MCU 移植方便
- 類微核心(microkernel)概念
- Kconfig 編譯時可裁剪/擴充
- 可支援多核心 (SMP)
- 微核心 + 模組化
- 通過 Packages 擴充
- 預設核心輕量、啟動速度快
排程機制- 可搶先式多工
- 優先順序排程
- preemption-threshold 降低不必要的搶先
- 可搶先式或協同式多工
- 時間片 (time slicing) 可選
- 任務通知提高效能
- 可搶先式/協同式混合
- 支援多核心下的任務搬移
- 彈性設定時間片與搶先策略
- 以優先順序為基礎的可搶先式
- 切換開銷低
- 適合時限嚴苛的應用
中斷管理- 提供快速中斷響應
- ISR 中可使用 IPC 原語
- 建議複雜邏輯放在 Thread
- 有完整的中斷優先級設定規範
- 提供「FromISR」API 與核心互動
- 避免高優先級中斷封鎖 RTOS 服務
- 針對不同架構有對應方法
- 允許在 ISR 後半段做較複雜處理
- 支援 irq_offload
- 中斷入口/出口簡潔
- 可在 ISR 裡做任務喚醒或 IPC
- 建議將重任務放在中斷後處理或 Task
任務通訊與同步- 提供 Semaphore、Mutex、Event Flags、Message Queue
- Block Pool / Byte Pool 作為底層資源
- 有 Queue、Semaphore、Mutex、Event Group、Task Notification
- Queue 是核心溝通管道
- 提供 Queue、FIFO、LIFO、Pipe、Mailbox、Semaphore、Mutex 等多樣化機制
- 信號(Signals)/事件等高階通訊
- 提供 Semaphore、Mutex、Event、Mailbox、Message Queue
- 模組化 API,易於擴充
記憶體管理- Block Pool(固定大小)
- Byte Pool(彈性分配)
- 適合小型系統
- 多種 heap 實作 (heap1~heap5)
- 依需求選擇靜態或動態配置
- 須注意配置 Semaphore / Mutex 以確保多任務安全
- slab、mempool、heap 等多種分配策略
- Kconfig 可細調
- 需在編譯階段做良好配置
- mempool、heap 二分法
- 預設輕量動態分配算法
- 可搭配自訂或高階 alloc 演算法
除錯與追蹤- 可使用 TraceX 等工具
- 整合度高,針對 Thread、Event、IPC 做可視化
- FreeRTOS+Trace、第三方 IDE 追蹤工具多
- 與 Percepio Tracealyzer 深度整合
- 統一的 Tracing 子系統
- 可連接 Tracealyzer、LTTng、SystemView 等
- 追蹤支援度豐富
- RT-Thread Studio 或其他插件
- 提供簡單 log 系統與線上除錯機制
- 社群亦有類似 FreeRTOS Trace 的追蹤方案
可移植性與擴充性- 官方主要支援多數 ARM、RISC-V、MIPS
- Microsoft 收購後社群逐漸擴大
- 幾乎所有 MCU 都有移植
- 大量第三方套件與驅動
- 可透過 AWS FreeRTOS 延伸雲端功能
- 原生支援多家大廠硬體 (Intel、NXP、Nordic…)
- Kconfig + Devicetree 與 Linux 類似
- 企業支援與社群並重
- 在亞洲(特別是中國)用得廣泛
- 與國產 MCU、RISC-V 平台整合度高
- Packages 方式讓功能彈性擴充

總結

總結一下前面提到的四種RTOS:

  1. AzureRTOS (ThreadX):以高效能與小巧佔用聞名,擅長在嚴苛的資源受限環境中執行,另有良好的除錯工具與商業案例,對STM32的支援度好。
  2. FreeRTOS:擁有巨大開源社群與靈活的擴充性,適用於廣泛的微控制器與嵌入式應用,在學術或商業專案皆常見,初學者適合。
  3. Zephyr:受到 Linux 基金會與多家企業的大力推動,硬體支援廣泛,並有強大的追蹤與分析工具,適合需要高可靠度及詳細監控的中大型嵌入式應用
  4. RT-Thread:架構輕量化、模組化明確,啟動速度快,適合物聯網及其他對即時性與資源效率要求高的場景。
comments powered by Disqus