專為嵌入式開發者打造的RTOS

作者: Kristoffer Rist Skøien,Nordic Semiconductor資深研發工程師

嵌入式開發人員通常習慣於裸機(bare metal)程式設計,或者對使用即時作業系統(Real-Time Operating System,RTOS)有所保留。本文將說明RTOS的作用,以及為什麼應該考慮使用它們。

現今的產品開發週期變得越來越複雜。由於開發的時間越來越短,但所需功能集日益擴展,使得繁忙的開發人員要千方百計在更短的時間內完成更多的工作。通常,使用RTOS可以提高任務管理和資源分享的效率。

什麼是RTOS ?

簡而言之,RTOS是一款為有效管理中央處理器(CPU)時間所設計的軟體。當時間是應用的重點時,這對於嵌入式系統尤為重要。

Windows等作業系統與嵌入式系統中常用RTOS的主要差別是對外部事件的反應時間(response time)。Windows等普通作業系統提供對事件的不確定性反應,即使試圖保持反應速度也無法保證何時處理事件。使得使用者認為,作業系統反應靈敏比處理基礎任務更為重要。另一方面,RTOS則提供了即時反應和高度確定性的反應。

習慣使用Windows或Linux等作業系統的開發人員將會非常熟悉嵌入式RTOS的特性。它們的設計讓它們可在記憶體有限的系統中運行,並且可以無限期運行而無需重置。由於RTOS旨在快速反應事件並在重負載(heavy load)的情況下執行,RTOS在執行大型任務時可能會比其他作業系統慢。

RTOS排程

RTOS的價值在於其出色的反應速度,而高級排程演算法(scheduling algorithm)是其中的關鍵元件。

嵌入式系統的時間要求因不同的系統應用而各有不同,從軟即時(soft-real time)的洗衣機控制系統到硬即時(hard-real time)的飛機安全系統等等。在後者的情況下,只有能夠準確預測作業系統排程程式的行為,才能滿足即時要求的基本需求。

許多作業系統給人一種可以同時執行多個程式的印象,但是這種多工處理的能力其實只是一種錯覺。一個處理器核心在任一時間只能執行一條執行緒,作業系統的排程程式會決定何時執行那一個程式或執行緒;憑藉在執行緒之間快速切換,讓人產生同時執行多項任務的錯覺。

靈活的RTOS排程程式可以採用廣泛的方法來處理優先順序,儘管RTOS通常主要用於非常狹窄的應用程式集。RTOS排程程式應提供最小的中斷延遲和最小的執行緒切換管理負擔,這是使得RTOS與重視時間的嵌入式系統如此密切相關的原因。

在嵌入式設計中使用RTOS

許多嵌入式設計的程式設計人員會避免使用RTOS,因為他們懷疑RTOS為其應用程式增加太多的複雜性,或者RTOS其實是一個未知的領域。為執行其任務,RTOS通常需要最多5%的CPU資源。儘管總會有一些資源上的損失,但RTOS可以在簡化的確定性、通過硬體抽象的易用性、縮減的開發時間以及更便利的除錯等等來彌補這一不足。

使用RTOS意味著你可以同時運行多項任務,並在需要時引入基本的連線性、隱私、安全性等;RTOS可以讓工程師針對專案的特定需求打造最佳化解決方案。

模組化的RTOS及其優勢所在

市面上有許多RTOS解決方案,在Nordic世界中的許多開發人員都專注於開發低功耗嵌入式系統。如果你也是這樣,我們建議你去了解一下Zephyr,它非常適合要求超低功耗的連接解決方案。模組化的Zephyr RTOS支援多種架構,因此開發人員可以輕鬆地定制解決方案以滿足其需求。

Zephyr是一款真正的開放原始碼解決方案。某些聲稱是開放原始碼的RTOS其實是由私人企業在推動的,Zephyr則是由Linux基金會管理,因此是開放原始碼的協作成果。Nordic的代表是委員會和工作組中的成員,與來自其他大型和小型企業的代表一起參與這些組織的運作。

到目前為止,RTOS的確定性排程功能已經成為焦點。此外,諸如Zephyr之類的RTOS還具有其他有用的功能。Zephyr具備有功能強大的日誌記錄系統,能夠輸出到多個後端,例如UART或RTT。日誌具有不同的優先順序,帶有時間戳記,並且可以按照模組或關鍵性級別輕鬆地過濾。

Zephyr還有許多簡化除錯的工具,例如CPU使用情況監控、堆疊標記、錯誤處理常式以及對PC工具的支援,這些工具可以讓用戶查看執行緒的執行和排程。當然,Zephyr還可以支援成熟的作業系統功能,例如互斥鎖(mutexe)、記憶體配置服務以及保護、執行緒同步和資料傳遞。當然,擁有一系列用於元件選擇的現成驅動程式也是很棒的特色,讓開發人員可以專注於手邊的應用程式,而不必自行製作和測試低層級的驅動程式。

經過一些適應之後,我相信大多數嵌入式開發人員將會更喜歡使用RTOS而不是裸機的程式設計。

(本文由Nordic Semiconductor供稿)

發表評論