在嵌入式系統中,對兼容性和便攜性的追求是一個永恒的挑戰。雖然今天許多系統都采用了實時操作系統(RTOS),但每個系統都是獨一無二的,差異很大,因此兼容性仍然是一個問題。如果你不希望應用程序代碼與RTOS緊密耦合,那么只有幾種選擇。
首先,你可以創建一個操作系統抽象層(OSAL)。雖然優雅且符合架構師的世界觀,但大多數團隊無法接受這個想法。這增加了復雜性,并且設計出完全符合你需求的產品具有挑戰性。(即使有一個像Arm的CMSIS-RTOS v2這樣的存在)。
一個更有趣也更容易接受的解決方案是采用便攜式操作系統接口(POSIX)。POSIX是一組標準化的API和約定,長期以來一直是類似Unix操作系統領域的主流。但是POSIX是未來開發RTOS應用程序的關鍵嗎?在這篇文章中,我們將探討POSIX在RTOS開發中的作用、它的優勢、考慮事項以及表明它可能確實是前進方向的趨勢。
POSIX是什么?
POSIX是IEEE定義的一組標準,用于確??珙?/span>Unix操作系統的兼容性和可移植性。它提供了標準的應用程序編程接口(API)、命令行外殼和實用程序接口。POSIX為線程管理、文件I/O、套接字和計時器定義了接口,使嵌入式開發人員能夠更容易地編寫跨不同Unix系統工作的軟件。
RTOS兼容性挑戰
RTOS應用程序通常是為它們運行的特定操作系統定制的。這種定制可確保應用程序充分利用RTOS的特性和功能。但是,它也將應用程序與RTOS緊密耦合在一起!對于一個從未計劃改變RTOS的團隊來說,這可能不是問題。RTOS成為他們的應用程序所圍繞的架構的核心組件。
任何優秀的軟件架構師都會討厭這個想法。一個好的架構和實現應該是與操作系統無關的,而不是以操作系統為中心!今天,許多嵌入式開發團隊正在設計他們計劃在未來十年或更長時間內使用的軟件平臺。你如何確定你選擇的RTOS將仍然存在或提供你需要的支持?如果業務目標或需求發生變化,而不同的RTOS最能滿足這些需求,那該怎么辦?
如果發生上述任何情況,并且你已經將RTOS與應用程序緊密耦合,那么你將面臨大量的時間和成本來更新和重新驗證你的軟件。你可能認為這只是更新調用的問題,只是幾天的工作。事情總是比你想象的復雜。例如,請參閱FreeRTOS如何在隊列中發送數據,以及ThreadX如何在隊列中將數據發送。一個按字節,另一個按字!沒什么大不了的,但如果你忽略了這一區別呢?(給你個提示:靜默緩沖區溢出,導致應用程序中其他地方出現意外行為!)。
POSIX在RTOS應用程序中的作用
POSIX可以作為RTOS開發中的一個統一因素。通過采用符合POSIX的API,RTOS供應商可以為嵌入式開發人員提供一個熟悉且一致的編程接口。這意味著為一個POSIX兼容的RTOS編寫的應用程序可以更容易地移植到另一個,而不需要大量的代碼更改。
有利于RTOS應用程序的一些關鍵POSIX特性包括:
l POSIX Threads (Pthreads):支持多線程和并行性,這對實時應用程序至關重要。
l POSIX文件I/O:簡化跨不同RTOS平臺的文件操作。
l POSIX套接字:用標準化的套接字API促進網絡通信。
l POSIX定時器:管理時間關鍵的任務和調度。
l POSIX信號:處理異步事件和信號。
l POSIX互斥和信號量:線程安全操作的同步原語。
在RTOS應用程序中使用POSIX的優點和缺點
在RTOS應用程序中采用POSIX有幾個好處。首先,POSIX兼容性使得跨不同的RTOS平臺重用或改編代碼更加容易,減少了開發時間和工作量。接下來,在基于POSIX的環境中有經驗的嵌入式開發人員可以在處理RTOS應用程序時利用他們的技能。傳統上,新開發人員需要大量的培訓。有了POSIX,任何熟悉Unix模型的開發人員從第一天開始就能高效工作。最后,開發者可以同時針對多個平臺。例如,一個團隊可以使用RTOS作為他們的嵌入式目標,但是測試他們的應用程序代碼Linux!
這些優勢有利于使用POSIX。不過,在做出這樣的決定之前,有必要了解POSIX的局限性。例如,有人認為POSIX抽象引入的開銷可能會影響資源受限環境中的實時性能。事實上,在資源高度受限的系統中,增加的復雜性可能會使POSIX的使用立即變得不可行。即使采用了POSIX,某些應用程序也可能會有特定的需求,單靠POSIX是無法完全滿足的。在這種情況下,特定于RTOS的API可能仍然是必要的,盡管團隊可能會盡力減少這些API的使用。
結論
在兼容性和可移植性至關重要的世界里,POSIX是應對RTOS應用程序開發挑戰的有前途的解決方案。雖然它可能不是一個萬能的解決方案,但它在代碼可移植性和開發人員熟悉度方面的優勢必須得到重視。RTOS應用的未來可能是POSIX驅動的,在資源受限的嵌入式系統中開創了一個跨平臺開發的新時代。已經有幾個開源的和商業的RTOS解決方案提供了POSIX接口。看看這個成熟的標準是否會在使用RTOS應用程序的嵌入式開發人員中獲得第二次生命,這將是一件有趣的事情。