技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于VxWorks實(shí)時(shí)操作系統(tǒng)的通信模型設(shè)計(jì)

基于VxWorks實(shí)時(shí)操作系統(tǒng)的通信模型設(shè)計(jì)

時(shí)間:2009-04-16 10:24:36來(lái)源:hesp

導(dǎo)語(yǔ):?軟件設(shè)計(jì)中模塊化的思想已日益普遍,模塊化的設(shè)計(jì)能夠使程序結(jié)構(gòu)清晰,便于維護(hù),開(kāi)發(fā)起來(lái)也更加高效。
軟件設(shè)計(jì)中模塊化的思想已日益普遍,模塊化的設(shè)計(jì)能夠使程序結(jié)構(gòu)清晰,便于維護(hù),開(kāi)發(fā)起來(lái)也更加高效。大型軟件通常由多個(gè)功能模塊構(gòu)成,模塊的功能實(shí)現(xiàn)又是由多個(gè)線程所支撐的。諸如windows,Linux類(lèi)型的操作系統(tǒng)自身能夠?qū)€程間的通信進(jìn)行較好的管理,不需要過(guò)多的關(guān)心底層。而VxWorks是一個(gè)多任務(wù)系統(tǒng),任務(wù)是系統(tǒng)最基本的執(zhí)行單元。功能模塊間的通信也就是任務(wù)間的通信,VxWorks對(duì)任務(wù)間通信的管理遠(yuǎn)沒(méi)有windows的完善。在模塊數(shù)量多,通信業(yè)務(wù)大的情況下VxWorks提供的任務(wù)間通信機(jī)制不能很好的滿足實(shí)時(shí)性與資源利用的要求。本文提出了一種任務(wù)間的通信模型,將用于網(wǎng)絡(luò)通信的UDP方式引進(jìn)到任務(wù)間的通信中,使通信更加靈活和便于管理,改善了整個(gè)系統(tǒng)的性能。 多任務(wù)實(shí)時(shí)操作系統(tǒng)VxWorks簡(jiǎn)介   VxWorks操作系統(tǒng)是一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),是嵌入式開(kāi)發(fā)環(huán)境的關(guān)鍵組成部分,具有可靠高、實(shí)時(shí)性強(qiáng)、可裁減性的特點(diǎn)。VxWorks為程序員提供了高效的實(shí)時(shí)任務(wù)調(diào)度、中斷管理、實(shí)時(shí)的系統(tǒng)資源以及任務(wù)間通信。應(yīng)用程序員可以將精力放在應(yīng)用程序本身,而不必關(guān)心系統(tǒng)資源的管理。VxWorks可以支持多達(dá)256個(gè)任務(wù),支持二進(jìn)制信號(hào)量、互斥信號(hào)量、消息郵箱等資源共享方式。高效實(shí)時(shí)的多任務(wù)內(nèi)核使得VxWorks能同時(shí)面對(duì)多個(gè)系列的MPU、MCU、DSP提供類(lèi)同的API接口,其良好的移植性在跨處理器平臺(tái)上只需要修改1%~5%的代碼。   良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶(hù)開(kāi)發(fā)環(huán)境,使VxWorks在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域占據(jù)一席之地。它以良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,如衛(wèi)星通信、軍事演習(xí)、彈道制導(dǎo)、飛機(jī)導(dǎo)航等。 傳統(tǒng)模塊間通信方式存在的問(wèn)題   嵌入式操作系統(tǒng)大多用于對(duì)實(shí)時(shí)性要求較高的場(chǎng)合,由于體積和成本的限制,嵌入式系統(tǒng)的資源和運(yùn)行速度都不能和PC機(jī)相比。因此在此類(lèi)系統(tǒng)上開(kāi)發(fā)的應(yīng)用程序的效率和減少資源消耗是十分重要的。VxWorks是一個(gè)多任務(wù)操作系統(tǒng),傳統(tǒng)的任務(wù)間通信模型有以下幾種:共享內(nèi)存、信號(hào)量和消息隊(duì)列三種,這幾種方式都有其不足的地方。   共享內(nèi)存方式使用全局變量或緩存,對(duì)于大型而復(fù)雜的程序,多個(gè)任務(wù)同時(shí)對(duì)一個(gè)變量進(jìn)行讀寫(xiě)操作會(huì)引起沖突或緩從區(qū)的溢出。信號(hào)量的通信模型雖然可以很好的起到互斥作用,但在多個(gè)任務(wù)同時(shí)與某一任務(wù)通信時(shí)就會(huì)產(chǎn)生對(duì)信號(hào)量的競(jìng)爭(zhēng),引起通信發(fā)起端的排隊(duì),降低系統(tǒng)的效率。消息隊(duì)列可以通過(guò)異步的消息傳送模型避免了由于信號(hào)量引起的排隊(duì)問(wèn)題,但任務(wù)數(shù)量較多時(shí)所需要的隊(duì)列數(shù)量過(guò)大,會(huì)耗費(fèi)大量系統(tǒng)資源。模塊數(shù)量多,通信量大引起的任務(wù)排隊(duì)和資源耗費(fèi)會(huì)對(duì)VxWorks的實(shí)時(shí)性和系統(tǒng)性能產(chǎn)生影響。下面介紹的通信模型在克服以上問(wèn)題方面有著一定的優(yōu)勢(shì)。 通信模型的原理與性能分析   整個(gè)通信模型由業(yè)務(wù)模塊、UDP插口、虛擬設(shè)備控制器(DEV)和統(tǒng)一定時(shí)器四部分組成。模塊間采用基于UDP的通信方式進(jìn)行信息交互,通過(guò)一種虛擬設(shè)備控制器(DEV)的概念將UDP插口與業(yè)務(wù)模塊綁定,兩者之間呈現(xiàn)一種松耦合的關(guān)系。每個(gè)模塊擁有屬于自己的DEV,負(fù)責(zé)管理UDP插口與其他模塊進(jìn)行交互。統(tǒng)一定時(shí)器負(fù)責(zé)協(xié)調(diào)和控制業(yè)務(wù)模塊發(fā)送消息的時(shí)機(jī)。統(tǒng)一定時(shí)器與DEV相結(jié)合共同完成模塊間的通信。   UDP本來(lái)是一種面向無(wú)連接的網(wǎng)絡(luò)通信方式,把它引入到一個(gè)程序的內(nèi)部作為通信手段需要考察其可靠性。UDP通信雖然是面向無(wú)連接的,在網(wǎng)絡(luò)情況不好時(shí)有可能產(chǎn)生丟包,但由于程序是在一臺(tái)主機(jī)上運(yùn)行,程序內(nèi)各個(gè)模塊之間的交互也只限于本機(jī)上,并不經(jīng)過(guò)網(wǎng)絡(luò),所以UDP包丟失的概率很小,通信可靠性是完全能夠得到保證的。通信模型的原理圖如下:
1 虛擬設(shè)備控制器(DEV)的概念   虛擬設(shè)備控制器(DEV)本質(zhì)上是一種數(shù)據(jù)結(jié)構(gòu),每個(gè)模塊通過(guò)聲明這樣一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)獲得屬于自己的DEV。DEV中記錄了有關(guān)UDP插口的信息,模塊號(hào)或模塊名稱(chēng)。DEV中還包括兩個(gè)環(huán)形緩沖區(qū)用于和模塊進(jìn)行數(shù)據(jù)交互。UDP插口是與DEV緊密結(jié)合在一起的,但并不與模塊直接聯(lián)系,也就是說(shuō)一個(gè)UDP并不固定屬于某一模塊,他們之間是一種松耦合的關(guān)系。DEV概念的引入將UDP套接字抽象為一種虛擬設(shè)備,供模塊使用。使通信功能與模塊的業(yè)務(wù)功能相互分離,更加獨(dú)立,提高了效率。模塊與UDP插口間也可以通過(guò)DEV進(jìn)行靈活的配置與釋放。DEV的結(jié)構(gòu)如下: Struct DEV { int Module_ID; //記錄模塊號(hào); int SocketKind; //記錄插口類(lèi)型; int socket_ID; //記錄socket句柄 struct RINGBUF_t m_Buf[2]; //兩個(gè)環(huán)形緩沖區(qū):[0]用于輸入[1]用于輸出 }   軟件初始化時(shí)可以申請(qǐng)若干個(gè)空閑DEV設(shè)備,當(dāng)某一業(yè)務(wù)模塊啟動(dòng)時(shí)可以申請(qǐng)一個(gè)空閑的DEV供自己使用。將DEV結(jié)構(gòu)體變量中的Module_ID填上該業(yè)務(wù)模塊的號(hào)碼就完成了模塊與DEV的綁定。再申請(qǐng)一個(gè)UDP插口,將插口句柄存放在DEV結(jié)構(gòu)體的socket_ID變量中就完成了UDP與DEV的結(jié)合,這樣業(yè)務(wù)模塊就通過(guò)DEV與UDP建立了聯(lián)系,模塊可以通過(guò)DEV來(lái)控制和使用該UDP進(jìn)行通信。當(dāng)模塊不再需要使用UDP時(shí),或者UDP插口出現(xiàn)故障時(shí),可以將其擁有的DEV中的Module_ID和socket_ID置為0,取消模塊與DEV的連接,完成對(duì)UDP的釋放。當(dāng)模塊再次需要使用UDP時(shí),可以重新申請(qǐng)DEV和UDP。這種送耦合的方式使得模塊的正常運(yùn)行不受UDP的影響,提高了程序的可靠性。 [b]2 統(tǒng)一定時(shí)器的作用 [/b]  統(tǒng)一定時(shí)器負(fù)責(zé)協(xié)調(diào)所有的UDP發(fā)送。程序初始化后啟動(dòng)統(tǒng)一定時(shí)器,定時(shí)器的時(shí)間一到就會(huì)執(zhí)行特定的動(dòng)作。它將輪詢(xún)所有的DEV,將DEV發(fā)送緩存中的內(nèi)容通過(guò)UDP發(fā)送出去。 3 通信的實(shí)現(xiàn)過(guò)程 ①UDP消息的發(fā)送   當(dāng)模塊A的某個(gè)任務(wù)需要與其他模塊通信時(shí),它將把信息打包通過(guò)UDP方式發(fā)送給其他模塊。模塊A的任務(wù)(線程)將需要發(fā)送的消息包放入DEV的1號(hào)緩存中,統(tǒng)一定時(shí)器每到一定的時(shí)間就輪詢(xún)所有的DEV,如果有信息等待發(fā)送就通過(guò)該DEV所控制的UDP插口將信息發(fā)往目的地。 ② UDP消息的接收   如圖2所示,每個(gè)模塊有一個(gè)監(jiān)視任務(wù)(線程),負(fù)責(zé)定時(shí)監(jiān)視該模塊對(duì)應(yīng)的DEV所控制的UDP端口,一旦UDP接收到消息,該線程負(fù)責(zé)將收到的消息從UDP的緩存中讀出存放到DEV的0號(hào)緩存中。模塊的其他工作任務(wù)需要獲得消息時(shí)可以從0號(hào)緩存中讀取并解析消息。
4 通信模型的性能分析   上述通信模型采用準(zhǔn)異步的方式,發(fā)送消息時(shí)各模塊同步,接收消息時(shí)異步。能夠避免多模塊通信時(shí)的沖突,并且能夠節(jié)省資源,在效率上優(yōu)于傳統(tǒng)的通信模型。松耦合的映射關(guān)系使得模塊與通信端口之間能夠靈活的結(jié)合與釋放,給軟件結(jié)構(gòu)的設(shè)計(jì)帶來(lái)了較大的自由。  ?、傩剩翰捎昧硕〞r(shí)器輪詢(xún)的消息發(fā)送方式,避免任務(wù)通信的沖突。模塊向其他模塊發(fā)送UDP消息時(shí)只需要將消息打包放入DEV的發(fā)送緩存中,包的發(fā)送工作由統(tǒng)一定時(shí)器完成。模塊本身并不關(guān)心數(shù)據(jù)包的發(fā)送,將包放入DEV后就可以進(jìn)行其他的工作。在多個(gè)模塊同時(shí)與某一模塊通信的情況下這種方式不會(huì)出現(xiàn)信號(hào)量模型中排隊(duì)等待信號(hào)量的現(xiàn)象,提升了系統(tǒng)的效率,實(shí)時(shí)性得到了保證。由于所有模塊的發(fā)送都由定時(shí)器完成,程序代碼得到了精簡(jiǎn),增強(qiáng)了代碼的共用性。  ?、谫Y源的利用:由于采用了UDP這種較為靈活的通信方式,模塊間需要通信時(shí)才發(fā)送消息,而不必在各個(gè)模塊間建立多條消息隊(duì)列。當(dāng)模塊數(shù)較大時(shí),這種方式在資源的節(jié)約上體現(xiàn)得更加明顯。例如:有n個(gè)模塊,兩兩間建立一對(duì)消息隊(duì)列就需要(n-1)!對(duì)隊(duì)列,程序要維護(hù)大量的消息隊(duì)列,資源消耗嚴(yán)重。采用本文的通信模型將會(huì)節(jié)約有限的系統(tǒng)資源,充分適應(yīng)嵌入式系統(tǒng)的開(kāi)發(fā)。  ?、巯⒍逊e問(wèn)題的解決:傳統(tǒng)通信模型中,模塊發(fā)送消息是不加限制的。只要有消息需要發(fā)送就立刻調(diào)用發(fā)送函數(shù),如果多個(gè)模塊在一段時(shí)間內(nèi)同時(shí)向一個(gè)模塊發(fā)送消息,而接收消息的模塊又來(lái)不及處理,消息不斷的堆積就會(huì)引起緩沖區(qū)的益處。采用統(tǒng)一定時(shí)器的方法在一定程度上使消息的發(fā)送有序和受限,在定時(shí)器兩次輪詢(xún)某一模塊的間歇期模塊就能夠處理前一次收到的消息,為接收新的消息作好準(zhǔn)備。只要定時(shí)器的定時(shí)時(shí)間設(shè)置合適,就能夠避免緩沖區(qū)的溢出。 [b]通信模型的實(shí)現(xiàn) [/b]  Vxworks是一個(gè)多任務(wù)的操作系統(tǒng),模型的各個(gè)組成部分可以通過(guò)任務(wù)來(lái)實(shí)現(xiàn),VxWorks的網(wǎng)絡(luò)編程接口和定時(shí)器使用起來(lái)十分方便,對(duì)用戶(hù)提供了開(kāi)放的API。只需要使用socket,send,receive,CreateTimer,SetTimer等函數(shù)就能夠?qū)μ捉幼趾投〞r(shí)器進(jìn)行操作。在程序的初始化過(guò)程中可以先開(kāi)啟定時(shí)器任務(wù),然后產(chǎn)生足夠數(shù)量的DEV,接下來(lái)順序啟動(dòng)各個(gè)模塊。啟動(dòng)每個(gè)模塊的過(guò)程中,首先申請(qǐng)一個(gè)空閑的DEV,然后產(chǎn)生一個(gè)UDP套接字,將套接字與DEV建立映射關(guān)系。完成了模塊與DEV的綁定后,啟動(dòng)一個(gè)監(jiān)視任務(wù)(Moniter_Task)監(jiān)視UDP端口。到此,通信模型建立完畢。最后啟動(dòng)模塊的其他工作任務(wù)開(kāi)始正常的業(yè)務(wù)流程。 結(jié)束語(yǔ)   本文提出了一種不同于傳統(tǒng)通信機(jī)制的模塊間通信模型。將用于網(wǎng)絡(luò)通信的UDP方式引入到程序內(nèi)的模塊間通信中,避免了傳統(tǒng)方式可能引起的降低效率與資源耗費(fèi)過(guò)多問(wèn)題。通過(guò)送耦合的連接方式增強(qiáng)了程序的靈活性。在實(shí)驗(yàn)中,這種基于UDP方式的虛擬設(shè)備綁定的通信模型取得了較好效果,在對(duì)實(shí)時(shí)性要求較高的嵌入式系統(tǒng)開(kāi)發(fā)中有著較高的價(jià)值。 編輯:何世平

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:基于DSP的逆變電源控制系統(tǒng)研究

下一篇:微能WIN-V63矢量控制變頻器在...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

相關(guān)資訊

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢(xún)采購(gòu)咨詢(xún)媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)