一種面向無(wú)線傳感網(wǎng)絡(luò)的構(gòu)件化開(kāi)發(fā)方法
摘要:構(gòu)件化的開(kāi)發(fā)模式使開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中能充分調(diào)用構(gòu)件庫(kù)中現(xiàn)有的構(gòu)件為其服務(wù)。研究了構(gòu)件化開(kāi)發(fā)模式的方法和特點(diǎn),針對(duì)目前無(wú)線傳感器網(wǎng)絡(luò)協(xié)議開(kāi)發(fā)方法中的缺陷,提出一種由應(yīng)用層構(gòu)件直接調(diào)用底層構(gòu)件的直接調(diào)用法。用該方法分析實(shí)現(xiàn)了無(wú)線傳感器網(wǎng)絡(luò)中主流的IEEE802.15.4 標(biāo)準(zhǔn),通過(guò)系統(tǒng)實(shí)現(xiàn)后的測(cè)試證明,該方案具有更高的開(kāi)發(fā)效率和代碼執(zhí)行效率。
引言
隨著移動(dòng)技術(shù)和互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,移動(dòng)網(wǎng)絡(luò)將是下一代網(wǎng)絡(luò)發(fā)展的大趨勢(shì)。而移動(dòng)網(wǎng)絡(luò)的重要子網(wǎng)之一無(wú)線傳感器網(wǎng)絡(luò)能夠大大擴(kuò)展互聯(lián)網(wǎng)的觸角。由于無(wú)線傳感器網(wǎng)絡(luò)低功耗、低成本、分布式和資源有限等特點(diǎn),使得開(kāi)發(fā)無(wú)線傳感器網(wǎng)絡(luò)的相關(guān)協(xié)議成為無(wú)線傳感器網(wǎng)絡(luò)發(fā)展的關(guān)鍵技術(shù)因素之一。傳統(tǒng)的軟件開(kāi)發(fā)方法顯然已經(jīng)不適合無(wú)線傳感器協(xié)議的開(kāi)發(fā),而近來(lái)興起的新的開(kāi)發(fā)模式是基于構(gòu)件化的軟件開(kāi)發(fā)方法。
基于構(gòu)件化的軟件開(kāi)發(fā)(CBSD,comp onent-based software development)方法是一種可以提供軟件復(fù)用性的開(kāi)發(fā)方法。構(gòu)件是用于進(jìn)行軟件開(kāi)發(fā)、復(fù)用和軟件組裝的基本單元。在面向構(gòu)件的技術(shù)里,一個(gè)應(yīng)用軟件不是通過(guò)大量的代碼來(lái)描述,而是通過(guò)數(shù)量有限的構(gòu)件來(lái)描述,如圖1(a)所示。與傳統(tǒng)的嵌入式軟件不同,構(gòu)件化的嵌入式軟件是由一組軟件構(gòu)件構(gòu)成的,這些構(gòu)件的一個(gè)或者幾個(gè)組合成一個(gè)完整的應(yīng)用;而且新的應(yīng)用也可以使用已有構(gòu)件,從而提高軟件復(fù)用性。傳統(tǒng)模式下開(kāi)發(fā)出來(lái)的嵌入式軟件提供的是專用服務(wù),軟件與應(yīng)用是一一對(duì)應(yīng)的,如圖1(b)所示。整個(gè)過(guò)程中代碼量大,復(fù)雜度高,代碼重用性小,并且更新困難,不適應(yīng)無(wú)線傳感器節(jié)點(diǎn)資源有限的要求。
TinyOS是一種基于構(gòu)件化的無(wú)線傳感器網(wǎng)絡(luò)操作系統(tǒng),該系統(tǒng)本身就是一個(gè)構(gòu)件庫(kù)。其開(kāi)發(fā)語(yǔ)言nesC 提供了對(duì)軟件構(gòu)件技術(shù)的支持。通過(guò)靈活組裝各個(gè)固定功能的芯片級(jí)構(gòu)件可以方便地搭建起不同硬件平臺(tái)級(jí)構(gòu)件。因此在TinyOS 系統(tǒng)下開(kāi)發(fā)構(gòu)件化的無(wú)線傳感器協(xié)議的方法已被廣泛使用。但是,目前由于開(kāi)發(fā)者過(guò)度依靠現(xiàn)有的集成構(gòu)件,導(dǎo)致開(kāi)發(fā)出來(lái)協(xié)議性能并不理想。
圖1 構(gòu)件化的嵌入式軟件與傳統(tǒng)嵌入式軟件
1 現(xiàn)有開(kāi)發(fā)方法描述
系統(tǒng)為了簡(jiǎn)化開(kāi)發(fā)者的開(kāi)發(fā)難度,對(duì)各芯片的底層構(gòu)件進(jìn)行了構(gòu)件化包裝。調(diào)用硬件底層構(gòu)件所提供的最基本功能接口,來(lái)組合實(shí)現(xiàn)一些功能模塊,如配制芯片模塊、發(fā)送數(shù)據(jù)模塊、接收數(shù)據(jù)模塊等。系統(tǒng)對(duì)各芯片的硬件抽象層的集成化操作基本是一樣的,圖2 是CC2420系統(tǒng)集成構(gòu)件調(diào)用硬件抽象層構(gòu)件的關(guān)系。
圖2 系統(tǒng)集成構(gòu)件和硬件抽象層構(gòu)件關(guān)系
由圖2 可以看出,系統(tǒng)集成構(gòu)件起到一個(gè)橋梁作用,使開(kāi)發(fā)者簡(jiǎn)化了開(kāi)發(fā)工作。但是,系統(tǒng)集成構(gòu)件在調(diào)用硬件抽象構(gòu)件實(shí)現(xiàn)自身功能的時(shí)候出現(xiàn)重復(fù)調(diào)用問(wèn)題。并且構(gòu)件CC2420SpiC 在不同的層(系統(tǒng)集成層和硬件抽象層)都有使用,這本身使得系統(tǒng)集成層和物
理抽象層關(guān)系變得模糊和復(fù)雜,加大開(kāi)發(fā)者開(kāi)發(fā)難度。
根據(jù)構(gòu)件化系統(tǒng)編程可知,調(diào)用構(gòu)件的接口需要實(shí)現(xiàn)提供接口構(gòu)件中的event 事件。如果多個(gè)構(gòu)件重復(fù)使用同一個(gè)構(gòu)件的同一個(gè)接口,每個(gè)使用該接口的構(gòu)件都需要將該接口中的event 事件執(zhí)行一次。系統(tǒng)集成構(gòu)件同時(shí)調(diào)用相同的硬件抽象層構(gòu)件中的接口命令時(shí),完成命令的signal 事件會(huì)通知每個(gè)使用該接口的構(gòu)件。這就導(dǎo)致了構(gòu)件化系統(tǒng)下編程常見(jiàn)問(wèn)題:扇出(fan-out)。系統(tǒng)為了解決這一問(wèn)題不得不將構(gòu)件性質(zhì)改為generic 類型。而這會(huì)引入新的構(gòu)件調(diào)用模式。所有這些使得系統(tǒng)集成構(gòu)件對(duì)硬件抽象層構(gòu)件的調(diào)用變得比實(shí)際要復(fù)雜,代碼的執(zhí)行效率大大降低。
2 直接調(diào)用底層構(gòu)件方法描述
對(duì)系統(tǒng)集成構(gòu)件的研究發(fā)現(xiàn),應(yīng)用層構(gòu)件在調(diào)用系統(tǒng)集成構(gòu)件時(shí)最終調(diào)用了硬件抽象層構(gòu)件,只是系統(tǒng)集成構(gòu)件將硬件抽象層構(gòu)件重新整合到某個(gè)大的集成構(gòu)件中,方便用戶查找接口。實(shí)際上,由于嵌入式軟件和硬件結(jié)合性高、硬件資源有限等特點(diǎn),為了使得軟件系統(tǒng)性能達(dá)到最高,嵌入式軟件開(kāi)發(fā)者在開(kāi)發(fā)之前對(duì)硬件已經(jīng)非常熟悉。在這種情況下沒(méi)有必要在硬件抽象層之上硬性加上系統(tǒng)抽象層。對(duì)開(kāi)發(fā)者而言,直接調(diào)用底層硬件抽象層構(gòu)件會(huì)更直觀、簡(jiǎn)單。
具體實(shí)現(xiàn)方法如圖3 所示,在構(gòu)件操作上對(duì)沒(méi)有引入新功能的構(gòu)件在配線構(gòu)件配線時(shí)候可以跨過(guò)整個(gè)系統(tǒng)集成構(gòu)件,而不會(huì)影響系統(tǒng)功能,并可以簡(jiǎn)化開(kāi)發(fā)過(guò)程,提高運(yùn)行效率。以下將這一方法簡(jiǎn)稱為直接調(diào)用法。
圖3 構(gòu)件簡(jiǎn)化過(guò)程
評(píng)論