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