版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、AnT:一 ,第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議6概述6.2分發(fā)路由協(xié)議6.3匯聚型路由協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議6.4 CTP協(xié)議的實現(xiàn)小結(jié)第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議6.1概述本章主要介紹這兩種協(xié)議以及實現(xiàn)過程。BRCK路由協(xié)議一頁是無線傳感器網(wǎng)絡(luò)研究的一個重要力in嘴g I nivOS 2.x屮存兩種展木的務(wù)跳路曲協(xié)議:分發(fā)路出協(xié)議 (I)isscmination Prolocol)和匯聚梨路山協(xié)議(Collection Protocol)! 分發(fā)協(xié)議能夠可靠地傳送小數(shù)據(jù)項到網(wǎng)絡(luò)中的每-個節(jié)點;江= 聚型路山 > 議吋以把網(wǎng)第屮H個|
2、丫點的小故抑;j川M到扌斤定第6章TinyOS網(wǎng)絡(luò)協(xié)議6.2分發(fā)路由協(xié)議ik; 出癒豳誣鈕幽國璨=踏那I!國霽婕輕適彌酒翹潮aiatg闌磁置鱷進(jìn)a第6章TinyOS網(wǎng)絡(luò)協(xié)議:的不冋濟 及具燃對于不同大小的數(shù)據(jù)項,分發(fā)協(xié)議的設(shè)計會有很丿 以下內(nèi)容將講解分發(fā)協(xié)議的一系列接口和組件,E 的實現(xiàn)過程。,©FMMMUMIMW步及至飩 f a gsBCSB >9 弱 M wA 匕 碼如 jmmi 尿a第6章TinyOS網(wǎng)絡(luò)協(xié)議inTrua第6章TinyOS網(wǎng)絡(luò)協(xié)議【代碼 6 -1 】 DisseminationValue.nc interface DisseminationValue<
3、;t>conmiand const t* get(); conmiand void set( const t* );a第6章TinyOS網(wǎng)絡(luò)協(xié)議a第6章TinyOS網(wǎng)絡(luò)協(xié)議a第6章TinyOS網(wǎng)絡(luò)協(xié)議餡第6章TinyOS網(wǎng)絡(luò)協(xié)議K1iffTruJl'l'.徐個的功能如下所述:DisseiiiiiiationValue.getO 命令獲取const 類型的指針據(jù)區(qū)域。DisseminationValue.set()命令允許節(jié)點改變其當(dāng)前的變量 值,并幫助節(jié)點給變量分配一個初始值。謫DisseminationValue.changedO觸發(fā)節(jié)點改變變量值的事件。(2) Dis
4、seminationUpdate接 口。a第6章TinyOS網(wǎng)絡(luò)協(xié)議DisseminationUpdate接口用于產(chǎn)生分發(fā)的數(shù)據(jù),此函妝,I少命令仃-個#什尹'丿I'i'j V放,DisseminationUpdate接口的組件必須將數(shù)據(jù)賦值至U自己 內(nèi)存中,Dissemination Value接口必須觸發(fā)cliange()事件,以此 作為對change()調(diào)用的響應(yīng)。其接口定義如代碼6-2所示。a第6章TinyOS網(wǎng)絡(luò)協(xié)議inTin【代碼 62 】 DisseminationUpdate.nc interface DisseminationUpdate<t&g
5、t;conmiand void cliange(t* ONE newVal);a第6章TinyOS網(wǎng)絡(luò)協(xié)議a第6章TinyOS網(wǎng)絡(luò)協(xié)議II2. 分發(fā)協(xié)議的組件在分發(fā)協(xié)議中有較多的組件,本文將講解比較重要 為DisseminatorC組件,該組件提供 了 DisseminationValuc 和DisseminationUpdate接口。該組件位于 utinyos-2.x /tos/lib/net/drip,其具體代碼如代碼6-3所示。【代碼 6-3 】 DisseminatorC.nca第6章TinyOS網(wǎng)絡(luò)協(xié)議a第6章TinyOS網(wǎng)絡(luò)協(xié)議provides interface Dissemin
6、ationValue<t> provides interface DisseminationUpdate<t>generic configuration DisseiiiinatorC(typedef t, dip_key_t儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTniv、fW在DisseiniiiafojrC組件中提供了兩個參數(shù):參數(shù)f和參如:數(shù)抑Si構(gòu)U!人小必須能夠包倉單彳 message_t 包。參數(shù)key:即鍵值key,允許創(chuàng)建不同的DisseminatorC實仮底 組件,類似于AM標(biāo)識號可以虛擬化AM服務(wù)。該鍵值一般由 麴(疋義相 f 程:ii儘第6章TinyO
7、S網(wǎng)絡(luò)協(xié)議iffTni1.創(chuàng)建myDissemination文件夾參照6.3.2節(jié)創(chuàng)建MultihopOscilloscop e文件夾的步咄 myDisseminationC件夾。創(chuàng)建完成后如圖61所示。創(chuàng)建E 第6章TinyOS網(wǎng)絡(luò)協(xié)議iiiTiiifViiw a圖 6-1 myDissemiiiatioii 文件夾15儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTni2.編寫程序(1) myDisseminationApp.nc o在myDisseminationApp.nc文件中列出了實現(xiàn)分發(fā)協(xié)要的一系列組件以及組件與組件的關(guān)系,具體代碼如描述6.D.1 myDisseminatioiiAppC.
8、ncT。【描述 6.D. 1 】 myDisseniinationAppC.iic#define MYID 8configuration myDisseminatioiiAppC implementation彳7components myDisseniinationC;components MainC; myDisseminationC.Boot > MainC;components ActiveMessageC; myDisseminationC.RadioControl -> ActiveMessageC; Hmponents DisseminationC;B.yDissemi
9、iiationC.DisseminationControl -> DisseminationC;第6章TinyOS網(wǎng)絡(luò)協(xié)議inTrucomponents new DisseminatorC(uint 16_t, 0x2345) as Object 1 myDisseminationC.Value 16 -> Objectl6C;myDisseminationC.Update 16 -> Object 16C; components LedsC;myDisseminationC.Leds > LedsC;components new TimerMilliC(); myDi
10、sseminationC.Timer > TimerMilliC; components new AMSenderC(MYID);myDisseminationC. AMSend->AMSenderC; myDisseminationC.Packet->AMSenderC; myDisseminationC. AMPacket->AMSenderC;inTru(2) myDisseminationC.nc o/l:.myl)isseiniiiation < (TJ I、'丿、:現(xiàn)小刃樸川勺介後 1;丿丿、L先分發(fā)者獲得需要分發(fā)的數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到網(wǎng)纟
11、收者接收到數(shù)據(jù)后,按照接收到的數(shù)據(jù)不同點亮不同的LED, 具體代碼如描述6.D.1 myDisseminationC.nc所示?!久枋?6.D. 1 myDisseminationC.nc#include <Timer.h>#include "BlinkToRadio.h"module myDisseminationCusesinterface AMSend;interface Receive;interface Packet;interface AMPacket;interface Boot;interface SplitControl as RadioCon
12、trol;inTininterface StdControl as DisseminationControl;interface DisseminationValue<uint 16_t> as Value interface DisseminationUpdate<uint 16_t> as Up( interface Leds;interface Timer<TMilli>第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議implementationuintl6_t counter;牆 6mTinyOS 罔lskamadd匚 DES n 0x0003
13、-3 沽羽LEDmgErsk void showcoullico(iKcoulltcn&oxl) call Lcds.lcdoono; iKcoun<&0x2)call Lcds.lcdlolo; iKcounicn&0x4) call Ledslcd2on(); i 仝 Coungn&ox8) call Ledscd3oll();第6章TinyOS網(wǎng)絡(luò)協(xié)議event void Boot.booted()開啟無線電服務(wù)call RadioControl.stait();event void RadioControl.startDone( error_t r
14、esult)if(result != SUCCESS)call RadioControl.stait();開啟分發(fā)服務(wù)call DisseminationControl.startO; counter = 0;開啟定時器event void RadioControl.stopDone( error_t result)ent void Timer.fired()message_t pkt;call Timer.stai*tPeriodic( 2000 );inTrucounter = counter+1;設(shè)定分發(fā)值call Update 16.change(&coi】i】2r); btr
15、pkt=(BliiikToRadioMsg*)call Packet.getPayload( &pkt,sizeof(BlinkToRadioMsg);btipkt->nodeid = DES;btrpkt->num = counter;第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議;call Leds.ledOToggle();/*發(fā)現(xiàn)分發(fā)值發(fā)生變化*/event void Value 16.changed() const uintl6_t* new Vai = call Valuel6.get(); counter = *newVal;如果數(shù)據(jù)發(fā)送成功,觸發(fā)LED
16、1閃爍event void AMSend.sendDone(message_t* Pkt,error_t err)第6章TinyOS網(wǎng)絡(luò)協(xié)議IIevent message_t* Receive.receive(message_t* msg, void* pa uint8_t len)if(len=sizeofBliiikToRadioMsg)獲得接收信息的負(fù)載BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)payload;取出發(fā)送的數(shù)值 counter = btrpkt->num;觸發(fā)LED閃爍post ShowCounter();return m
17、sg;儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTni1; T1(3) BlinkToRadioMsg.h。在 BlinkToRadioMsg.h文件中定義了 myDisseiniiiatioT 文件中發(fā)送數(shù)據(jù)所使用的結(jié)構(gòu)體。其具體代碼如描述6.丁 B linkToRa dioMsg. h 所示。第6章TinyOS網(wǎng)絡(luò)協(xié)議【描述 6.D. 1 BliiikToRadioMsg.h #ifiidef_BLINKTORADIO_H# define _BLINKTORADIO_H typedef iix_stmct BlinkToRadioMsg nx_uintl6_t nodeid; nx_uintl6_
18、t num;第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議3編寫Makefile文件在myDissemination文件夾下創(chuàng)建Makefile文件,并MMakefile文件中添加描述6.D.1 Makefile文件內(nèi)容?!久枋?.D. 1】Makefile文件COMPONENT=myDisseminatioiLAppCCFLAGS += -I$(TOSDIR)/lib/net -I%T/lib/net/drip include $(MAKERULES)14.分發(fā)協(xié)議可視化組件程序編譯成功后,在Cygwin下輸入“makecc2530 令生成可視化組件關(guān)系圖,如圖62所示。第6章Tiny
19、OS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議DiccenunationValue<umt 16 t>二 Timer TMil.嗨獷St-珍pVq轉(zhuǎn)疑'圖6-2分發(fā)協(xié)議可視化組件餡第6章TinyOS網(wǎng)絡(luò)協(xié)議蹲iffTruv5.實驗現(xiàn)象將程序燒寫至設(shè)備中(需要兩個設(shè)備),可以觀察有個現(xiàn)象:設(shè)備的LED1閃爍,說明數(shù)據(jù)發(fā)送成功。闊設(shè)備的LED1LED4逐個點亮,說明設(shè)備接收到不同的分餡第6章TinyOS網(wǎng)絡(luò)協(xié)'議 iffTrn6.3匯聚型路由協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議扌居發(fā)彳蠱13££F做3蛋朋冒|£爼!玄那51融痢跡謹(jǐn)啊|Sf|!|E罪縫腿E
20、HiiP癮據(jù)接收* I H第6章TinyOS網(wǎng)絡(luò)協(xié)議irrrin圖63匯聚型路由協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議Mfe 節(jié)點。握第6章TinyOS網(wǎng)絡(luò)協(xié)議戲覷豳is鯽豳脈“re趨縄蜩那血蠶irrrin(1) Send.nco6-4Send接口的主要功能是發(fā)送數(shù)據(jù)以及獲得數(shù)據(jù)負(fù)載 此接口有4個命令函數(shù),1個事件觸發(fā)函數(shù),其接口如代 所示。佩第6章TinyOS網(wǎng)絡(luò)協(xié)議【代碼6-4】Send.nc#include <TinyError.h>#include <message.h> interface Sendcommand error_t send(message_t* msg
21、, uint8_t len); command error_t cancel(message_t* msg);event void sendDone(message_t* msg, error_t error); command uint8_t maxPayloadLength();command void* getPayload(message_t* msg, uint8_t len);儘第6章TinyOS網(wǎng)絡(luò)協(xié)議 iffTnit其中,各個函數(shù)功能描述如下:sendM數(shù)譏功能是發(fā)迖數(shù)據(jù),它決定了發(fā)迖數(shù)大長度。caiicel()函數(shù)主要功能是取消當(dāng)前要發(fā)送的數(shù)據(jù)力闊sendDone()函數(shù)為觸
22、發(fā)發(fā)送事件函數(shù),如果發(fā)送成功則返 回SUCCESS,失敗則返回FAILo踴4/乂。痂 get評數(shù)據(jù)白liiaxPayloadLengthO函數(shù)主要功能是獲得負(fù)載數(shù)據(jù)的最人ayload()函數(shù)主要功能是獲得需要發(fā)送的數(shù)據(jù)以及發(fā) 勺長度。佩第6章TinyOS網(wǎng)絡(luò)協(xié)議inTin(2) Receive.ncoReceive接口主要功能是接收生產(chǎn)者的數(shù)據(jù),此接I 有一個函數(shù),其具體代碼如代碼6-5所示?!敬a 6-5 】Receive.ncinterface Receiveevent messagereceive(message_t* msg, void* payload, uint8_t len);i
23、nTru(3) Intercept.nco肖息,Intercept接口主要功能是共網(wǎng)絡(luò)處理者接收并更新j 此接口只有一個事件函數(shù),其具體代碼如代碼6-6所示?!敬a 6-6 】Intercept.ncinterface InterceptIntercept.forward件的主要功能是當(dāng)節(jié)點接收至U 發(fā)的消息包時,匯聚服務(wù)心觸發(fā)這卜W如加刎屈磨謁 回值為FASLE,那么匯聚服務(wù)就不能轉(zhuǎn)發(fā)這個包。此接口允許更高層的組件檢查消息包的內(nèi)部,女In息包多余,或者消息包可以匯聚到已有消息包內(nèi),此時可以龍 過此接口事件對消息進(jìn)行相應(yīng)處理。蠡1 Mgl?<i Ka s<Ib a B M J M
24、B Mu .fSialFj g>JuM|J»i MSI a M B m.Hb ;轡6一7所:II【代碼 67 】RootControl.nc interface RootControlconmiand error_t setRoot(); conmiand error_t unsetRoot(); conmiand bool isRootQ;如果-個節(jié)點已經(jīng)是根節(jié)點,并調(diào)用sefRoot命令,園虜騒 冋 SUCCESS o如果sefRoot命令返回SUCCESS,那么isRoot命令禎IB® 須返回TRUE。如果unsetRoot命令的調(diào)用返回SUCCESS,那么is
25、Root命令 必須返回FALSE o叫儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTni, t|2.匯聚服務(wù)組件匯聚服務(wù)主要通過CollecfioiiC組件、CollectionSeiK件和CollectionSenderP組件來進(jìn)行匯聚服務(wù)的,具體介葛(1) CollectionC.nCo匯聚服務(wù)必須提供CollectionC組件,并且大多數(shù)的匯聚協(xié). 議的接口是由Collection組件來提供的,CollectionC組件的具 實現(xiàn)如代碼68所示。佩第6章TinyOS網(wǎng)絡(luò)協(xié)議【代碼 68 】CollectionC.ncconfiguration CollectionC provides interf
26、ace StdControl;interface Senduint8_t client;interface Receivecollection_id_t id;interface Receive as Snoopcollection_id_t;interface Interceptcollection_id_t id;interface Packet;iterface CollectionPacket; iterface CtpPacket;inTruinterface Ctplnfb;interface CtpCongestion;interface RootControl;uses int
27、erface Collectionlduint8_t client;interface CollectioiiDebug;佩第6章TinyOS網(wǎng)絡(luò)協(xié)議佩第6章TinyOS網(wǎng)絡(luò)協(xié)議StdControl = CtpP;Send = CtpP;Receive = CtpP. Receive;Snoop = CtpP. Snoop;Intercept = CtpP;Packet = CtpP;CollectionPacket = CtpP;佩第6章TinyOS網(wǎng)絡(luò)協(xié)議irr|7uCtplnfo 二 CtpP;CtpCongestion = CtpP;RootControl = CtpP;Collect
28、ionld = CtpP; CollectionDebug = CtpP;佩第6章TinyOS網(wǎng)絡(luò)協(xié)議491 I &TAVbj Lfl /J 予EfKnBmnfisEfl s £31 issi bc an n=包你?eih?£?mkMWMMHHiiHiiifi$砂點。j;. <理節(jié)二、第6章TinyOS網(wǎng)絡(luò)協(xié)議 CollectionSenderC.ncoCollectioiiSeiid(?iW/fT-;u -個迪川 W W; T SeMM和Packet接口、并且兩個接口是通過CollectioiiSeiideiP來實現(xiàn)的,CollectionSenderC組件
29、具體代碼如代碼6-9所示?!敬a 69 】CollectionSenderC.ncgeneric configuration CollectionSenderC(collection_id_t collectid) provides interface Send;interface Packet;implementation components new CollectionSenderP(collectid, unique(UQ_CTP_CLIENT);Send = CollectionSenderP;第6章TinyOS網(wǎng)絡(luò)協(xié)議儘第6章TinyOS網(wǎng)絡(luò)協(xié)'議 iffTni(3) Co
30、llectionSenderP.nc o()llccli()iiScii(lcfP;z| (. ->_ (I1-冋個攔Seiul-j V iPacket® o CollecfioiiSeiideiP組件通過綁定Send接口 木IBM 接口到CollectionC組件上實現(xiàn),CollectionSenderP組件的具體 代碼如代碼610所示。,第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議【代碼 6-10 CollectionSenderP.ncgeneric configurationCollectionSenderP(collection_id
31、_t collectid, uint8_t clientiprovides第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議interface Send; interface Packet;CollectoiCollectionIdclientid> CollectionldP;implementation components CollectionC as Collector; components new CollectionldP(collectid);Send = Collector. Send clientid;Packet = Collector.Packet;0餡第6章T
32、inyOS網(wǎng)絡(luò)協(xié)、議 iffTru:.W:BX.0 r/:*» 以及彳wmMMMMMBMHM路由引.0inTin轉(zhuǎn)發(fā)引擎路由引擎鏈路估計器圖6-4 CTP總體架構(gòu)0儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTni其中,各個部分的功能如下:鏈路估計器:位于最底層,負(fù)責(zé)估計節(jié)點與鄰居的單跳鏈路質(zhì)量,并維護(hù)-個鄰居表。路由引擎:位于中間層,使用鏈路估計器提供F'輸擇到根節(jié)點傳輸代價最小的節(jié)點作為父節(jié)點,并維護(hù)一個路I, 表。RSI儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTni儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTni>(Liiik 礙.妻;“ mytirr團- /儘第6章TinyOS網(wǎng)絡(luò)協(xié)議
33、麟後邂iffTniv、yWLE估計器和4BITLE估計器的實現(xiàn)在結(jié)構(gòu)上大體相同的是4BITM訃器捉取的物理以、鏈路以以及網(wǎng)絡(luò)丿饋信息能夠提高鏈路估計的精確值。因此本書中采用4的估計器。該組件的具體代碼如代碼6 -11所示。第6章TinyOS網(wǎng)絡(luò)協(xié)議inTru【代碼 6-11 】L inkE s tima torP. lie module LiiikEstimatorPprovidesinterface StdControl;第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議interface AMSend as Send;interface Receive;第6章TinyOS網(wǎng)絡(luò)協(xié)議uses
34、interface AMSend;interface AMPacket as SubAMPacket;interface Packet as SubPacket;interface Receive as SubReceive;interface LinkPacketMetadata;interface Random;和刪除鬼熱碼如代II【代碼 6-12 】LiiikE st ima torP. lieconmiand error_t LiiikEstimator.txAck(am_addr_t neighboJ neighbor_table_entiy_t *iie;uint8_t nidx
35、= findldx(neighbor);if (nidx = INVALID_RVAL)return FAIL;3->data_total+;2 = &NeighborTablenidx; ->data_success+;第6章TinyOS網(wǎng)絡(luò)協(xié)議inTruif(ne->data_total >= DLQ_PKT_WINDOW) updateDETX(ne);return SUCCESS;第6章TinyOS網(wǎng)絡(luò)協(xié)議txNoAck:當(dāng)節(jié)點沒有接收到數(shù)據(jù)的確認(rèn)幀時,同樣也更新發(fā) 送節(jié)點與接收節(jié)點的鏈路估計值。具體源碼如代碼6-13所示。樓第6章TinyOS網(wǎng)絡(luò)協(xié)議i
36、nTin【代碼 6-13 】LiiikE st ima torP. nc conmiand error_t LiiikEstimator.txNoAck(am_addr_t neigh neighbor_table_entiy_t *iie;uint8_t nidx = findldx(neighbor);第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議iriTrnlie = &NeighborTablenidx; ne->data_total+;if(ne->data_total >= DLQ_PKT_WINDOW)儘第6章TinyOS
37、網(wǎng)絡(luò)協(xié)議iffTni(2)鄰居節(jié)點的添加。鄰居節(jié)點的添加是通過LiiikPacketMetadata接口來”通過此接口判斷信道是否具有較高的鏈路質(zhì)量,并把/風(fēng)加入到鄰居表中,便于以后在選擇路徑時考慮該鄰啟羈路。其實現(xiàn)代碼如代碼6-15所示。裁儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTni儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTni第6章TinyOS網(wǎng)絡(luò)協(xié)議【代碼6-15】LiiikEstimatorP.ncif (call LinkPacketMetadatahighChannelQuality(nisg)if (signal CompareBit.shouldlnseit(msg,call Packe
38、t.getPayload(msg, call Packet.payloadLength(msg)J|call Packet.payloadLength(msg)-nidx = findRandoniNeighborIdx();if (nidx != INVALID_RVAL)71第6章TinyOS網(wǎng)絡(luò)協(xié)議signalLinkEstiniatorcvictGd(NGighborTablenidxll_addjr);initNeighborIdx(nidx, ll_addr);第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議儘第6章TinyOS網(wǎng)絡(luò)協(xié)議iffTniT; T,2.路由引擎路由引擎
39、負(fù)責(zé)計算到匯聚樹根節(jié)點的路由,即選扌輸?shù)南?跳。它記錄了由鏈路估計表維護(hù)的-組節(jié)點望傳輸值 ETX(Expected Transmissions)。CTP是使用ETX作為路由梯度來表示雙向鏈路質(zhì)量的估計 值。ETX值越小表示鏈路質(zhì)量越好。其中,根節(jié)點的路徑ET 為0,普通節(jié)點的路徑ETX為其下一跳節(jié)點的路徑酯路的連接ETX,因此節(jié)點的路徑ETX是該節(jié)點到根曲 條路由的每跳連接ETX之和o第6章TinyOS網(wǎng)絡(luò)協(xié)議inTru計重臓路由引擎每隔一定事件就會根據(jù)更新的鏈路質(zhì)量沖 進(jìn)行路由選擇,主要是計算路徑ETX和重選父節(jié)點,然 一個路由幀,包括當(dāng)前的父節(jié)點地址和路徑ETX。在TinyOS 2.x中
40、CTP路由引擎的實現(xiàn)是通過 CtpRoutingEngineP組件來實現(xiàn)的,其組件在 “mytinyos/lib/net ctp/ CtpRoutingEngineP?5目錄下,具體實現(xiàn)代碼如代碼6-16所zj O第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議>esII【代碼 6-16 CtpRoutingEngineP.ncgeneric module CtpRoutingEngineP(uint8_t routingTableSize,uint32_t niinlnt erva 1 ,n int 3 2_t maxlnteival)providesin
41、terface UnicastNameFreeRouting as Routing;interface RootControl;interface Ctplnfb;interface StdControl;interface CtpRoutingPacket; interface Init;inTruinterface AMSend as BeaconSend;interface Receive as BeaconReceive;interface LinkEstimator;interface AMPacket;interface SplitControl as RadioControl;
42、interface Timer<TMilli> as BeaconTimer;interface Timer<TMilli> as RonteTimer; interface Random;interface CollectionDebug;interface CtpCongestion;interface CompareBit;第6章TinyOS網(wǎng)絡(luò)協(xié)議在CtpRoutingEngineP組件中,通過LiiikEstimator接獲辭鏈路估計器和路由引擎之間的交流是通過LinkEsti晶Lgg 口和CompareBit接口來進(jìn)行的。在這兩個接口中,其命令函婁翻 返回的
43、鏈路質(zhì)量值都是標(biāo)準(zhǔn)形式。其中,LiiikEstimator.getQualityO的返回值越小,表示該通信鏈路的力 量越好。鄰居表中的節(jié)點以及與該鄰居節(jié)點的雙向鏈路質(zhì)量。I3. 轉(zhuǎn)發(fā)引擎轉(zhuǎn)發(fā)引擎主要負(fù)責(zé)以下5種功能:傳遞消息包到下一跳,在必要時重傳以及向鏈路召 遞應(yīng)答信號。決定何時向下一跳節(jié)點傳輸。IM遴外寫 J廠檢測路由中的不一致,并通知路由引擎?!敬a6-17】 CtpF oi*wardingEngineP.nc generic module CtpForwajrdiiigEiigiiwPO providesinterface Init;interface StdControl;inter
44、face Senduint8_t client;interface Receivecollection_id_t id;interface Receive as Snoopcollection_id_t id;interface Interceptcollection_id_t id;interface Packet;interface CollectionPacket;interface CtpPacket;usesinterface AM Send as SubSend; interface Receive as SubReceive;interface Receive as SubSno
45、op;interface Packet as SubPacket;interface UnicastNameFreeRouting;interface SplitControl as RadioControl;interface Queue<fe_queue_entiy_t*> as SendQueue; interface Pool<fe_queue_entiy_t> as QEntiyPool; interface Pool<message_t> as MessagePool;interface Timer<TMilli> as Retxii
46、iitTimer;interface LinkEstimator;interface Timer<TMilli> as Congesti011Timer;interface Cache<message_t*> as SentCache;interiface Ctplnfb;interface PacketAckiiowledgements;interface Random;interface RootControl;interface Collectionlduint8_t client;interface AMPacket;interface CollectionDe
47、bug;interface Leds;第6章TinyOS網(wǎng)絡(luò)協(xié)議第6章TinyOS網(wǎng)絡(luò)協(xié)議數(shù)、喙、護(hù)1 Yf /第6章TinyOS網(wǎng)絡(luò)協(xié)議II【代碼6-18 CtpF oi*wardingEngineP.ncevent message_t*SubReceive.receive(message_t* msg, void* payload, uint8_t len) collection_id_t collectid;bool duplicate = FALSE;fe_queue_entiy_t* qe;uint8_t i, till;collectid = call CtpPacket.getT
48、ype(msg);1 = call CtpPacket.getThl(msg);call CtpPacket.setThl(msg, till);call CollectionDebug.logEventMsg(NET_C_FE_RCV_MSG,callCollectionPacket.getSequenceNumber(msg),callCollectionPacket.getOngin(msg),return msg;till-); if (len > call SubSend.maxPayloadLength()inTruif (call SentCache.lookup(msg)callCollectionDebug.logEvent(NET_C_FE_DUPLICATE_CACHE); return msg;if (call SendQueue.size() > 0)duplicate = TRUE; break:qe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年班主任工作計劃例文
- 2025年第二學(xué)期教師工作計劃
- Unit4 My favorite subject Section A 2a-2f 說課稿 2024-2025學(xué)年人教版(2024)七年級英語上冊
- Unit 5 The colourful world Period 2(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 2025年物業(yè)客服下半年工作計劃
- 2025年街道婦聯(lián)工作計劃格式范本
- Unit 1 Science and Scientists Reading and Thinking 說課稿 高中英語同步備課系列人教版2019選擇性必修第二冊
- 汽車香水相關(guān)行業(yè)投資方案范本
- 2025年度國有建設(shè)用地供應(yīng)計劃活動方案
- 全國河大音像版初中信息技術(shù)七年級下冊第一章第一節(jié)《電子報的一般制作流程》說課稿
- 022化妝品委托加工合同
- 樁裂縫計算(自動版)
- 高邊坡施工危險源辨識及分析
- 給排水全套資料表格模版
- 萬噸鈦白粉項目建議
- 化妝品購銷合同范本
- 7725i進(jìn)樣閥說明書
- 銀監(jiān)會流動資金貸款需求量測算表
- 榴園小學(xué)寒假留守兒童工作總結(jié)(共3頁)
- 初中物理-電功率大題專項
- 時光科技主軸S系列伺服控制器說明書
評論
0/150
提交評論