TinyOS操作系统开发技术及实践第6章TinyOS网络协议

上传人:沈*** 文档编号:62169760 上传时间:2022-03-14 格式:DOC 页数:155 大小:8.63MB
返回 下载 相关 举报
TinyOS操作系统开发技术及实践第6章TinyOS网络协议_第1页
第1页 / 共155页
TinyOS操作系统开发技术及实践第6章TinyOS网络协议_第2页
第2页 / 共155页
TinyOS操作系统开发技术及实践第6章TinyOS网络协议_第3页
第3页 / 共155页
点击查看更多>>
资源描述
AnT:一 ,第6章TinyOS网络协议第6章TinyOS网络协议6概述6.2分发路由协议6.3汇聚型路由协议第6章TinyOS网络协议6.4 CTP协议的实现小结第6章TinyOS网络协议第6章TinyOS网络协议6.1概述本章主要介绍这两种协议以及实现过程。BRCK路由协议一頁是无线传感器网络研究的一个重要力in嘴g I nivOS 2.x屮存两种展木的务跳路曲协议:分发路出协议 (I)isscmination Prolocol)和汇聚梨路山协议(Collection Protocol)! 分发协议能够可靠地传送小数据项到网络中的每-个节点;江= 聚型路山 议吋以把网第屮H个| 丫点的小故抑;j川M到扌斤定第6章TinyOS网络协议6.2分发路由协议ik; 出癒豳誣鈕幽国璨=踏那I!国霽婕輕适彌酒翹潮aiatg闌磁置鱷進a第6章TinyOS网络协议:的不冋濟 及具燃对于不同大小的数据项,分发协议的设计会有很丿 以下内容将讲解分发协议的一系列接口和组件,E 的实现过程。,FMMMUMIMW步及至饨 f a gsBCSB 9 弱 M wA 匕 码如 jmmi 尿a第6章TinyOS网络协议inTrua第6章TinyOS网络协议【代码 6 -1 】 DisseminationValue.nc interface DisseminationValueconmiand const t* get(); conmiand void set( const t* );a第6章TinyOS网络协议a第6章TinyOS网络协议a第6章TinyOS网络协议餡第6章TinyOS网络协议K1iffTruJll.徐个的功能如下所述:DisseiiiiiiationValue.getO 命令获取const 类型的指针据区域。DisseminationValue.set()命令允许节点改变其当前的变量 值,并帮助节点给变量分配一个初始值。謫DisseminationValue.changedO触发节点改变变量值的事件。(2) DisseminationUpdate接 口。a第6章TinyOS网络协议DisseminationUpdate接口用于产生分发的数据,此函妆,I少命令仃-个#什尹丿Iij V放,DisseminationUpdate接口的组件必须将数据赋值至U自己 内存中,Dissemination Value接口必须触发cliange()事件,以此 作为对change()调用的响应。其接口定义如代码6-2所示。a第6章TinyOS网络协议inTin【代码 62 】 DisseminationUpdate.nc interface DisseminationUpdateconmiand void cliange(t* ONE newVal);a第6章TinyOS网络协议a第6章TinyOS网络协议II2. 分发协议的组件在分发协议中有较多的组件,本文将讲解比较重要 为DisseminatorC组件,该组件提供 了 DisseminationValuc 和DisseminationUpdate接口。该组件位于 utinyos-2.x /tos/lib/net/drip,其具体代码如代码6-3所示。【代码 6-3 】 DisseminatorC.nca第6章TinyOS网络协议a第6章TinyOS网络协议provides interface DisseminationValue; provides interface DisseminationUpdate;generic configuration DisseiiiinatorC(typedef t, dip_key_t儘第6章TinyOS网络协议iffTniv、fW在DisseiniiiafojrC组件中提供了两个参数:参数f和参如:数抑Si构U!人小必须能够包倉单彳 message_t 包。参数key:即键值key,允许创建不同的DisseminatorC实仮底 组件,类似于AM标识号可以虚拟化AM服务。该键值一般由 麴(疋义相 f 程:ii儘第6章TinyOS网络协议iffTni1.创建myDissemination文件夹参照6.3.2节创建MultihopOscilloscop e文件夹的步咄 myDisseminationC件夹。创建完成后如图61所示。创建E 第6章TinyOS网络协议iiiTiiifViiw a图 6-1 myDissemiiiatioii 文件夹15儘第6章TinyOS网络协议iffTni2.编写程序(1) myDisseminationApp.nc o在myDisseminationApp.nc文件中列出了实现分发协要的一系列组件以及组件与组件的关系,具体代码如描述6.D.1 myDisseminatioiiAppC.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.yDissemiiiationC.DisseminationControl - DisseminationC;第6章TinyOS网络协议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(); myDisseminationC.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、丿、:现小刃朴川勺介後 1;丿丿、L先分发者获得需要分发的数据,然后将数据发送到网纟 收者接收到数据后,按照接收到的数据不同点亮不同的LED, 具体代码如描述6.D.1 myDisseminationC.nc所示。【描述 6.D. 1 myDisseminationC.nc#include #include BlinkToRadio.hmodule myDisseminationCusesinterface AMSend;interface Receive;interface Packet;interface AMPacket;interface Boot;interface SplitControl as RadioControl;inTininterface StdControl as DisseminationControl;interface DisseminationValue as Value interface DisseminationUpdate as Up( interface Leds;interface Timer;第6章TinyOS网络协议第6章TinyOS网络协议implementationuintl6_t counter;牆 6mTinyOS 罔lskamadd匚 DES n 0x0003 -3 沽羽LEDmgErsk void showcoullico(iKcoulltcn&oxl) call Lcds.lcdoono; iKcounnodeid = DES;btrpkt-num = counter;第6章TinyOS网络协议第6章TinyOS网络协议;call Leds.ledOToggle();/*发现分发值发生变化*/event void Value 16.changed() const uintl6_t* new Vai = call Valuel6.get(); counter = *newVal;如果数据发送成功,触发LED1闪烁event void AMSend.sendDone(message_t* Pkt,error_t err)第6章TinyOS网络协议IIevent message_t* Receive.receive(message_t* msg, void* pa uint8_t len)if(len=sizeofBliiikToRadioMsg)获得接收信息的负载BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)payload;取出发送的数值 counter = btrpkt-num;触发LED闪烁post ShowCounter();return msg;儘第6章TinyOS网络协议iffTni1; T1(3) BlinkToRadioMsg.h。在 BlinkToRadioMsg.h文件中定义了 myDisseiniiiatioT 文件中发送数据所使用的结构体。其具体代码如描述6.丁 B linkToRa dioMsg. h 所示。第6章TinyOS网络协议【描述 6.D. 1 BliiikToRadioMsg.h #ifiidef_BLINKTORADIO_H# define _BLINKTORADIO_H typedef iix_stmct BlinkToRadioMsg nx_uintl6_t nodeid; nx_uintl6_t num;第6章TinyOS网络协议第6章TinyOS网络协议3编写Makefile文件在myDissemination文件夹下创建Makefile文件,并MMakefile文件中添加描述6.D.1 Makefile文件内容。【描述6.D. 1】Makefile文件COMPONENT=myDisseminatioiLAppCCFLAGS += -I$(TOSDIR)/lib/net -I%T/lib/net/drip include $(MAKERULES)14.分发协议可视化组件程序编译成功后,在Cygwin下输入“makecc2530 令生成可视化组件关系图,如图62所示。第6章TinyOS网络协议第6章TinyOS网络协议DiccenunationValue二 Timer TMil.嗨犷St-珍pVq轉疑图6-2分发协议可视化组件餡第6章TinyOS网络协议蹲iffTruv5.实验现象将程序烧写至设备中(需要两个设备),可以观察有个现象:设备的LED1闪烁,说明数据发送成功。闊设备的LED1LED4逐个点亮,说明设备接收到不同的分餡第6章TinyOS网络协议 iffTrn6.3汇聚型路由协议第6章TinyOS网络协议扌居发彳蠱13F做3蛋朋冒|爼!玄那51融痢跡謹啊|Sf|!|E罪縫腿EHiiP癮据接收* I H第6章TinyOS网络协议irrrin图63汇聚型路由协议第6章TinyOS网络协议Mfe 节点。握第6章TinyOS网络协议戲覷豳is鲫豳脈“re趨縄蜩那血蠶irrrin(1) Send.nco6-4Send接口的主要功能是发送数据以及获得数据负载 此接口有4个命令函数,1个事件触发函数,其接口如代 所示。佩第6章TinyOS网络协议【代码6-4】Send.nc#include #include interface Sendcommand error_t send(message_t* msg, 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网络协议 iffTnit其中,各个函数功能描述如下:sendM数讥功能是发迖数据,它决定了发迖数大长度。caiicel()函数主要功能是取消当前要发送的数据力闊sendDone()函数为触发发送事件函数,如果发送成功则返 回SUCCESS,失败则返回FAILo踊4/乂。痂 get評数据白liiaxPayloadLengthO函数主要功能是获得负载数据的最人ayload()函数主要功能是获得需要发送的数据以及发 勺长度。佩第6章TinyOS网络协议inTin(2) Receive.ncoReceive接口主要功能是接收生产者的数据,此接I 有一个函数,其具体代码如代码6-5所示。【代码 6-5 】Receive.ncinterface Receiveevent messagereceive(message_t* msg, void* payload, uint8_t len);inTru(3) Intercept.nco肖息,Intercept接口主要功能是共网络处理者接收并更新j 此接口只有一个事件函数,其具体代码如代码6-6所示。【代码 6-6 】Intercept.ncinterface InterceptIntercept.forward件的主要功能是当节点接收至U 发的消息包时,汇聚服务心触发这卜W如加刎屈磨谒 回值为FASLE,那么汇聚服务就不能转发这个包。此接口允许更高层的组件检查消息包的内部,女In息包多余,或者消息包可以汇聚到已有消息包内,此时可以龙 过此接口事件对消息进行相应处理。蠡1 Mgl?i Ka sJuM|Ji MSI a M B m.Hb ;轡6一7所:II【代码 67 】RootControl.nc interface RootControlconmiand error_t setRoot(); conmiand error_t unsetRoot(); conmiand bool isRootQ;如果-个节点已经是根节点,并调用sefRoot命令,园虜騒 冋 SUCCESS o如果sefRoot命令返回SUCCESS,那么isRoot命令禎IB 须返回TRUE。如果unsetRoot命令的调用返回SUCCESS,那么isRoot命令 必须返回FALSE o叫儘第6章TinyOS网络协议iffTni, t|2.汇聚服务组件汇聚服务主要通过CollecfioiiC组件、CollectionSeiK件和CollectionSenderP组件来进行汇聚服务的,具体介葛(1) CollectionC.nCo汇聚服务必须提供CollectionC组件,并且大多数的汇聚协. 议的接口是由Collection组件来提供的,CollectionC组件的具 实现如代码68所示。佩第6章TinyOS网络协议【代码 68 】CollectionC.ncconfiguration CollectionC provides interface 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 interface Collectionlduint8_t client;interface CollectioiiDebug;佩第6章TinyOS网络协议佩第6章TinyOS网络协议StdControl = CtpP;Send = CtpP;Receive = CtpP. Receive;Snoop = CtpP. Snoop;Intercept = CtpP;Packet = CtpP;CollectionPacket = CtpP;佩第6章TinyOS网络协议irr|7uCtplnfo 二 CtpP;CtpCongestion = CtpP;RootControl = CtpP;Collectionld = CtpP; CollectionDebug = CtpP;佩第6章TinyOS网络协议491 I &TAVbj Lfl /J 予EfKnBmnfisEfl s 31 issi bc an n=包你?eih?mkMWMMHHiiHiiifi$砂点。j;. _ (I1-冋个拦Seiul-j V iPacket o CollecfioiiSeiideiP组件通过绑定Send接口 木IBM 接口到CollectionC组件上实现,CollectionSenderP组件的具体 代码如代码610所示。,第6章TinyOS网络协议第6章TinyOS网络协议第6章TinyOS网络协议【代码 6-10 CollectionSenderP.ncgeneric configurationCollectionSenderP(collection_id_t collectid, uint8_t clientiprovides第6章TinyOS网络协议第6章TinyOS网络协议interface Send; interface Packet;CollectoiCollectionIdclientid CollectionldP;implementation components CollectionC as Collector; components new CollectionldP(collectid);Send = Collector. Send clientid;Packet = Collector.Packet;0餡第6章TinyOS网络协、议 iffTru:.W:BX.0 r/:* 以及彳wmMMMMMBMHM路由引.0inTin转发引擎路由引擎链路估计器图6-4 CTP总体架构0儘第6章TinyOS网络协议iffTni其中,各个部分的功能如下:链路估计器:位于最底层,负责估计节点与邻居的单跳链路质量,并维护-个邻居表。路由引擎:位于中间层,使用链路估计器提供F輸择到根节点传输代价最小的节点作为父节点,并维护一个路I, 表。RSI儘第6章TinyOS网络协议iffTni儘第6章TinyOS网络协议iffTni(Liiik 礙.妻;“ mytirr團- /儘第6章TinyOS网络协议麟後邂iffTniv、yWLE估计器和4BITLE估计器的实现在结构上大体相同的是4BITM讣器捉取的物理以、链路以以及网络丿馈信息能够提高链路估计的精确值。因此本书中采用4的估计器。该组件的具体代码如代码6 -11所示。第6章TinyOS网络协议inTru【代码 6-11 】L inkE s tima torP. lie module LiiikEstimatorPprovidesinterface StdControl;第6章TinyOS网络协议第6章TinyOS网络协议interface AMSend as Send;interface Receive;第6章TinyOS网络协议usesinterface 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 = findldx(neighbor);if (nidx = INVALID_RVAL)return FAIL;3-data_total+;2 = &NeighborTablenidx; -data_success+;第6章TinyOS网络协议inTruif(ne-data_total = DLQ_PKT_WINDOW) updateDETX(ne);return SUCCESS;第6章TinyOS网络协议txNoAck:当节点没有接收到数据的确认帧时,同样也更新发 送节点与接收节点的链路估计值。具体源码如代码6-13所示。楼第6章TinyOS网络协议inTin【代码 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网络协议第6章TinyOS网络协议第6章TinyOS网络协议iriTrnlie = &NeighborTablenidx; ne-data_total+;if(ne-data_total = DLQ_PKT_WINDOW)儘第6章TinyOS网络协议iffTni(2)邻居节点的添加。邻居节点的添加是通过LiiikPacketMetadata接口来”通过此接口判断信道是否具有较高的链路质量,并把/風加入到邻居表中,便于以后在选择路径时考虑该邻启羁路。其实现代码如代码6-15所示。裁儘第6章TinyOS网络协议iffTni儘第6章TinyOS网络协议iffTni第6章TinyOS网络协议【代码6-15】LiiikEstimatorP.ncif (call LinkPacketMetadatahighChannelQuality(nisg)if (signal CompareBit.shouldlnseit(msg,call Packet.getPayload(msg, call Packet.payloadLength(msg)J|call Packet.payloadLength(msg)-nidx = findRandoniNeighborIdx();if (nidx != INVALID_RVAL)71第6章TinyOS网络协议signalLinkEstiniatorcvictGd(NGighborTablenidxll_addjr);initNeighborIdx(nidx, ll_addr);第6章TinyOS网络协议第6章TinyOS网络协议儘第6章TinyOS网络协议iffTniT; T,2.路由引擎路由引擎负责计算到汇聚树根节点的路由,即选扌输的下-跳。它记录了由链路估计表维护的-组节点望传输值 ETX(Expected Transmissions)。CTP是使用ETX作为路由梯度来表示双向链路质量的估计 值。ETX值越小表示链路质量越好。其中,根节点的路径ET 为0,普通节点的路径ETX为其下一跳节点的路径酯路的连接ETX,因此节点的路径ETX是该节点到根曲 条路由的每跳连接ETX之和o第6章TinyOS网络协议inTru计重臓路由引擎每隔一定事件就会根据更新的链路质量冲 进行路由选择,主要是计算路径ETX和重选父节点,然 一个路由帧,包括当前的父节点地址和路径ETX。在TinyOS 2.x中CTP路由引擎的实现是通过 CtpRoutingEngineP组件来实现的,其组件在 “mytinyos/lib/net ctp/ CtpRoutingEngineP?5目录下,具体实现代码如代码6-16所zj O第6章TinyOS网络协议第6章TinyOS网络协议第6章TinyOS网络协议esII【代码 6-16 CtpRoutingEngineP.ncgeneric module CtpRoutingEngineP(uint8_t routingTableSize,uint32_t niinlnt erva 1 ,n int 3 2_t maxlnteival)providesinterface 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; interface Timer as BeaconTimer;interface Timer as RonteTimer; interface Random;interface CollectionDebug;interface CtpCongestion;interface CompareBit;第6章TinyOS网络协议在CtpRoutingEngineP组件中,通过LiiikEstimator接获辭链路估计器和路由引擎之间的交流是通过LinkEsti晶Lgg 口和CompareBit接口来进行的。在这两个接口中,其命令函娄翻 返回的链路质量值都是标准形式。其中,LiiikEstimator.getQualityO的返回值越小,表示该通信链路的力 量越好。邻居表中的节点以及与该邻居节点的双向链路质量。I3. 转发引擎转发引擎主要负责以下5种功能:传递消息包到下一跳,在必要时重传以及向链路召 递应答信号。决定何时向下一跳节点传输。IM遴外寫 J厂检测路由中的不一致,并通知路由引擎。【代码6-17】 CtpF oi*wardingEngineP.nc generic module CtpForwajrdiiigEiigiiwPO providesinterface Init;interface StdControl;interface 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 SubSnoop;interface Packet as SubPacket;interface UnicastNameFreeRouting;interface SplitControl as RadioControl;interface Queue as SendQueue; interface Pool as QEntiyPool; interface Pool as MessagePool;interface Timer as RetxiiiitTimer;interface LinkEstimator;interface Timer as Congesti011Timer;interface Cache as SentCache;interiface Ctplnfb;interface PacketAckiiowledgements;interface Random;interface RootControl;interface Collectionlduint8_t client;interface AMPacket;interface CollectionDebug;interface Leds;第6章TinyOS网络协议第6章TinyOS网络协议数、喙、护1 Yf /第6章TinyOS网络协议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.getType(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 = call S end Qu eu e. e lenient (i);if (call CtpPacket.matchInstance(qe-msg, msg)for (i = call SendQueue.size(); i;)if (duplicate)call CollectioiiDebug.logEvent(NET_C_FE_DUPLICATE_QUEI return msg;else if (call RootControl.isRootO)return signal Receive.receivecollectid(msg,call Packet.getPayload(msg, call Packet.payloadLength(msg),call Packet.payloadLength(msg)call Packet.getPayload(msg, I call Packet.payloadLength(msg)|else if (!signal Iiiteirept.foivrardcollectid(msg,return msg;elsedbg(nRoute* Forwarding packet from %hu.n, getHeader(msg)-origin);return fbiward(msg);. .KTALBlpjwjLr| /幕护输做女I I查发送:密詐餡第6章TinyOS网络协议iffTruv、6.4.2 CTP协议实例以下内容将实现任务描述6.D.2,使用CTP协议实划的传输。完成此任务描述需要以下儿个步骤:(1) 在 “mytinyos/apps” 目录下创建MultihopOscilloscope文件夹。E(2) 在MultihopOscilloscope文件夹下创建并编写開MultihopOscilloscope App.nc 文件和 MultihopOscilloscopeC.nc 文 MulfihopOscilloscopeApp.iic 是顶层西 C 置组件。U扁写Makefile文件。第6章TinyOS网络协议II1.创建MultihopOscilloscope文件夹打开cygwin,在mytinyos/apps” 目录下,输入ink(MultihopOscilloscope,创建文件夹,具体操作如I图65月第6章TinyOS网络协议第6章TinyOS网络协议第6章TinyOS网络协议珍J:莎Ve J 二1.:“ /opt/ayt inyos/appsBBlirgPE276780600A743A /optZmytinyosZapps刁$ nkdir MultihopOsc illoscope dPl1上B图6-5 创建MultiliopOscilloscope文件夹92:遷 燥* i*燥.JFB jHk第6章TinyOS网络协议轨八2.创建并编写主要组件在 MiilfiliopOscilloscope 文件夹下创建MultihopOscilloscopeApp.nc文件和Multihop OscilloscopeCTiB 件。(1) MultihopOscilloscopeAppC.nc o在 MultihopOscilloscopeApp.nc 5C 件中主要列出了 实现 CTP 协议数据传输的各个组件之间的关系,其主要代码如描述noMultihopOscilloscopeAppC.ncII【描述6.D.2 】 MultihopOscilloscopeAppC.ncconfiguration MultihopOscilloscopeAppC implementationcomponents MainC, MultihopOsci
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!