決定是在實時操作系統 (RTOS) 下運行固件還是開發裸機解決方案對于嵌入式系統的成功至關重要,然而,決定走哪個方向可能很困難。以下是每個嵌入式開發人員在做出決定之前應考慮的五個因素。
因素1——搶占
決定 RTOS 和裸機調度程序的主要因素是系統是否需要搶占。如果搶占是必需的,那么 RTOS 就是是正確的選擇! 暫停任務和執行更高優先級任務的能力是 RTOS 的主要優勢之一。如果任務的優先級設置得當,可以大大提高系統的實時性。在裸機級別,開發人員可能會認為可以通過使用中斷和設置中斷優先級來獲得搶占行為。在某種程度上這是正確的,但這樣的中斷應該是快速、短暫的。嘗試使用中斷來搶占當前正在運行的函數可能會影響系統的實時性能。
因素2——內存
如今,許多開發人員的第一反應是直接使用RTOS,同時嘗試選擇具有最少 RAM 和閃存集的部件。但是他們在這樣做的時候很少或者根本不了解最終軟件的內存占用。結果是“不適合該區域”的錯誤遲早會發生。許多RTOS默認將每個任務或線程的堆棧大小設置為0x200,這是堆棧深度而不是大小的指標。在32位機器上,默認情況下,每個任務的內存大小可能高達2kB!顯然,這個數量嵌入式開發人員可以根據應用程序進行調整,但默認值確實開始提供一些關于使用RTOS所需的最小RAM數量的信息。
還應考慮RTOS的閃存使用。典型的RTOS至少可以使用6kb到8 kB的閃存。這聽起來占用空間很小,除非所選MCU中只有16 kB的閃存空間。當考慮使用RTOS時,一個好的經驗法則是,系統至少應該包含32 kB的閃存和4 kB的RAM。
因素3——中間件
可用的中間件可能是決定是否使用RTOS的一個重要因素。許多RTOS都有中間件堆棧,如文件系統、USB或TCP/IP,可以輕松集成到RTOS中。將這些堆棧集成到裸機系統中會很耗時并且容易出錯,盡管它們很簡單并且可以直接與RTOS集成。嵌入式開發人員應該考慮應用程序可能需要什么樣的中間件堆棧,以及使用哪種解決方案他們會“玩得更好”。
因素4——便攜性和重復使用
RTOS的使用不能保證可移植性或代碼重用,裸機解決方案也不能。然而,基于RTOS的固件解決方案的設計確實傾向于產生具有明確定義的任務并且可以使其自身被重用的固件。裸機固件可以被編寫成可移植和可重用的,但這通常感覺需要更多的努力,而且不是自然而然的。
因素5——體驗
RTOS或裸機解決方案的選擇可能基于開發人員的經驗。缺乏 RTOS 經驗可能會導致開發周期痛苦且漏洞百出。RTOS設置起來很快,但調試起來可能很耗時。抽象層會使窺視操作系統的真實行為變得困難。一個沒有RTOS經驗的嵌入式開發團隊最好使用裸機解決方案,并在較小的項目中測試驅動RTOS以獲得必要的經驗。