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