tinyos操作系统开发技术及实践(西电版)第6章tinyos网络协议

上传人:tian****1990 文档编号:81571260 上传时间:2019-02-21 格式:PPT 页数:107 大小:1.49MB
返回 下载 相关 举报
tinyos操作系统开发技术及实践(西电版)第6章tinyos网络协议_第1页
第1页 / 共107页
tinyos操作系统开发技术及实践(西电版)第6章tinyos网络协议_第2页
第2页 / 共107页
tinyos操作系统开发技术及实践(西电版)第6章tinyos网络协议_第3页
第3页 / 共107页
tinyos操作系统开发技术及实践(西电版)第6章tinyos网络协议_第4页
第4页 / 共107页
tinyos操作系统开发技术及实践(西电版)第6章tinyos网络协议_第5页
第5页 / 共107页
点击查看更多>>
资源描述

《tinyos操作系统开发技术及实践(西电版)第6章tinyos网络协议》由会员分享,可在线阅读,更多相关《tinyos操作系统开发技术及实践(西电版)第6章tinyos网络协议(107页珍藏版)》请在金锄头文库上搜索。

1、第6章 TinyOS网络协议,6.1 概述 6.2 分发路由协议 6.3 汇聚型路由协议 6.4 CTP协议的实现 小结,6.1 概述 路由协议一直是无线传感器网络研究的一个重要方向,在TinyOS 2.x中有两种基本的多跳路由协议:分发路由协议(Dissemination Protocol)和汇聚型路由协议(Collection Protocol)。分发协议能够可靠地传送小数据项到网络中的每一个节点;汇聚型路由协议可以把网络中每个节点的小数据项传递到指定的根节点。本章主要介绍这两种协议以及实现过程。,6.2 分发路由协议 分发协议主要用于实现共享变量的网络一致性。网络中的每个节点都保存有该共

2、享变量的一个副本。分发服务会通知节点该变量值更改的时间,同时交换数据包以达到整个网络的一致性。在任意给定时刻,可能会有两个节点的变量值不相同。但过一段时间后,不一致的节点数会越来越少,最终整个网络都将同一于一个相同的变量值。分发协议具有以下几个特点: 分发协议能够达到网络的高度一致性,能有效避免临时性通信链路失效以及高丢包率等网络传输问题。 分发协议要求在有链路连接的情况下确保能够达到某个变量值一致。,对于不同大小的数据项,分发协议的设计会有很大的不同。 以下内容将讲解分发协议的一系列接口和组件,以及具体的实现过程。,6.2.1 相关接口和组件 在TinyOS 2.x中为分发协议提供了实现,下

3、面讲解涉及到的重要接口和组件。 1. 分发协议的接口 在分发协议中分发服务提供了两个主要的接口:DisseminationValue接口和DisseminationUpdate接口。它们都位于“tinyos-2.x/tos/lib/net/”目录下。 (1) DisseminationValue接口。 DisseminationValue接口适用于接收从网络中分发过来的数据,在此接口中包含两个命令函数和一个事件函数,其具体代码如代码6-1所示。,【代码6-1】 DisseminationValue.nc interface DisseminationValue command const t*

4、 get(); command void set( const t* ); event void changed(); ,其中,各个函数的功能如下所述: DisseminationValue.get()命令获取const类型的指针指向数据区域。 DisseminationValue.set()命令允许节点改变其当前的变量值,并帮助节点给变量分配一个初始值。 DisseminationValue.changed()触发节点改变变量值的事件。 (2) DisseminationUpdate接口。,DisseminationUpdate接口用于产生分发的数据,此接口只包含一个命令函数,该命令有一个指

5、针类型的参数,提供DisseminationUpdate接口的组件必须将数据赋值到自己分配的内存中,DisseminationValue接口必须触发change()事件,以此作为对change()调用的响应。其接口定义如代码6-2所示。,【代码6-2】 DisseminationUpdate.nc interface DisseminationUpdate command void change(t* ONE newVal); ,2. 分发协议的组件 在分发协议中有较多的组件,本文将讲解比较重要的组件为DisseminatorC组件,该组件提供了DisseminationValue接口和Dis

6、seminationUpdate接口。该组件位于“tinyos-2.x /tos/lib/net/drip”,其具体代码如代码6-3所示。 【代码6-3】 DisseminatorC.nc generic configuration DisseminatorC(typedef t, dip_key_t key) provides interface DisseminationValue; provides interface DisseminationUpdate; ,在DisseminatorC组件中提供了两个参数:参数t和参数key。 参数t:数据包结构类型,其大小必须能够包含单个mess

7、age_t包。 参数key:即键值key,允许创建不同的DisseminatorC实例组件,类似于AM标识号可以虚拟化AM服务。该键值一般由unique()函数产生。,6.2.2 分发协议的实现 以下内容将实现任务描述6.D.1,使用分发协议进行小数据的发送接收,当节点收到分发者发送的数据时,点亮LED。需要以下几个步骤: (1) 在“cygwinoptmytinyosapps”目录下创建myDissemination子目录。 (2) 在myDissemination目录下创建并编写myDisseminationApp.nc文件(核心应用模块)、myDisseminationC.nc文件(顶层

8、配件)和BlinkToRadioMsg.h文件(定义相关数据结构体)。 (3) 编写Makefile文件。,1. 创建myDissemination文件夹 参照6.3.2节创建MultihopOscilloscope文件夹的步骤创建myDissemination文件夹。创建完成后如图6-1所示。,图6-1 myDissemination文件夹,2. 编写程序 (1) myDisseminationApp.nc。 在myDisseminationApp.nc文件中列出了实现分发协议所需要的一系列组件以及组件与组件的关系,具体代码如描述6.D.1 myDisseminationAppC.nc所示。

9、,【描述6.D.1】 myDisseminationAppC.nc #define MYID 8 configuration myDisseminationAppC implementation components myDisseminationC; components MainC; myDisseminationC.Boot - MainC; components ActiveMessageC; myDisseminationC.RadioControl - ActiveMessageC; components DisseminationC; myDisseminationC.Disse

10、minationControl - DisseminationC;,components new DisseminatorC(uint16_t, 0x2345) as Object16C; myDisseminationC.Value16 - Object16C; myDisseminationC.Update16 - Object16C; components LedsC; myDisseminationC.Leds - LedsC; components new TimerMilliC(); myDisseminationC.Timer - TimerMilliC; components

11、new AMSenderC(MYID); myDisseminationC.AMSend-AMSenderC; myDisseminationC.Packet-AMSenderC; myDisseminationC.AMPacket-AMSenderC; components new AMReceiverC(MYID); myDisseminationC.Receive-AMReceiverC; ,(2) myDisseminationC.nc。 在myDissemination文件中实现了小数据的分发协议,首先分发者获得需要分发的数据,然后将数据发送到网络中;接收者接收到数据后,按照接收到的

12、数据不同点亮不同的LED,具体代码如描述6.D.1 myDisseminationC.nc所示。,【描述6.D.1】 myDisseminationC.nc #include #include “BlinkToRadio.h” module myDisseminationC uses interface AMSend; interface Receive; interface Packet; interface AMPacket; interface Boot; interface SplitControl as RadioControl;,interface StdControl as Di

13、sseminationControl; interface DisseminationValue as Value16; interface DisseminationUpdate as Update16; interface Leds; interface Timer; implementation uint16_t counter;,am_addr_t DES = 0x0003; /*点亮LED任务*/ task void ShowCounter() if(counter ,event void Boot.booted() /开启无线电服务 call RadioControl.start(

14、); event void RadioControl.startDone( error_t result ) if ( result != SUCCESS ) call RadioControl.start(); else ,/开启分发服务 call DisseminationControl.start(); counter = 0; /开启定时器 call Timer.startPeriodic( 2000 ); event void RadioControl.stopDone( error_t result ) ; event void Timer.fired() message_t pk

15、t; BlinkToRadioMsg* btrpkt;,counter = counter+1; /设定分发值 call Update16.change( , /*发现分发值发生变化*/ event void Value16.changed() const uint16_t* newVal = call Value16.get(); counter = *newVal; /如果数据发送成功,触发LED1闪烁 event void AMSend.sendDone(message_t* Pkt,error_t err) call Leds.led0Toggle(); /接收部分,event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) if(len=sizeof(BlinkToRadioMsg) /获得接收信息的负载 BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)payload; /取出发送的数值 counter = btrpkt-num; /触发LED闪烁 post ShowCounter(); return msg; ,(3) BlinkToRadioMsg.h。 在BlinkToRadioMsg.h文件中定义了myDisseminatio

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号