精品课件-TinyOS操作系统开发技术及实践-第6章
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
provides interface DisseminationValue<t>; provides interface DisseminationUpdate<t>; }
10
第6章 TinyOS网络协议 在DisseminatorC组件中提供了两个参数:参数t和参数key。 参数t:数据包结构类型,其大小必须能够包含单个
if(counter&0x2)
call Leds.led1On();
if(counter&0x4)
call Leds.led2On();
if(counter&0x8)
call Leds.led3On();
}
21
第6章 TinyOS网络协议
event void Boot.booted()
{
//开启无线电服务
3
第6章 TinyOS网络协议 对于不同大小的数据项,分发协议的设计会有很大的不同。 以下内容将讲解分发协议的一系列接口和组件,以及具体的
实现过程。
4
第6章 TinyOS网络协议
6.2.1 相关接口和组件 在TinyOS 2.x中为分发协议提供了实现,下面讲解涉及到的
重要接口和组件。 1. 分发协议的接口 在分发协议中分发服务提供了两个主要的接口:
interface Leds;
interface Timer<TMilli>;
}
}
implementation
Байду номын сангаас
{
20
第6章 TinyOS网络协议
am_addr_t DES = 0x0003;
/*点亮LED任务*/
task void ShowCounter()
{
if(counter&0x1)
call Leds.led0On();
message_t包。 参数key:即键值key,允许创建不同的DisseminatorC实例
组件,类似于AM标识号可以虚拟化AM服务。该键值一般由 unique()函数产生。
11
第6章 TinyOS网络协议
6.2.2 分发协议的实现 以下内容将实现任务描述6.D.1,使用分发协议进行小数据
的发送接收,当节点收到分发者发送的数据时,点亮LED。需要 以下几个步骤:
件。 (2) DisseminationUpdate接口。
7
第6章 TinyOS网络协议 DisseminationUpdate接口用于产生分发的数据,此接口只
包含一个命令函数,该命令有一个指针类型的参数,提供 DisseminationUpdate接口的组件必须将数据赋值到自己分配的 内存中,DisseminationValue接口必须触发change()事件,以 此作为对change()调用的响应。其接口定义如代码6-2所示。
6
第6章 TinyOS网络协议 其中,各个函数的功能如下所述: DisseminationValue.get()命令获取const类型的指针指向
数据区域。 DisseminationValue.set()命令允许节点改变其当前的变
量值,并帮助节点给变量分配一个初始值。 DisseminationValue.changed()触发节点改变变量值的事
(1) 在“cygwin\opt\mytinyos\apps”目录下创建 myDissemination子目录。
(2) 在myDissemination目录下创建并编写 myDisseminationApp.nc文件(核心应用模块)、 myDisseminationC.nc文件(顶层配件)和BlinkToRadioMsg.h文 件(定义相关数据结构体)。
(3) 编写Makefile文件。
12
第6章 TinyOS网络协议 1. 创建myDissemination文件夹 参照6.3.2节创建MultihopOscilloscope文件夹的步骤创建
myDissemination文件夹。创建完成后如图6-1所示。
13
第6章 TinyOS网络协议
图6-1 myDissemination文件夹
16
第6章 TinyOS网络协议
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 new AMSenderC(MYID); myDisseminationC.AMSend->AMSenderC; myDisseminationC.Packet->AMSenderC; myDisseminationC.AMPacket->AMSenderC;
DisseminationValue接口和DisseminationUpdate接口。它们都 位于“tinyos-2.x/tos/lib/net/”目录下。
(1) DisseminationValue接口。 DisseminationValue接口适用于接收从网络中分发过来的数 据,在此接口中包含两个命令函数和一个事件函数,其具体代码 如代码6-1所示。
{
23
第6章 TinyOS网络协议
counter = counter+1;
//设定分发值
call Update16.change(&counter);
btrpkt=(BlinkToRadioMsg*)call
Packet.getPayload(&pkt,sizeof(BlinkToRadioMsg));
5
第6章 TinyOS网络协议 【代码6-1】 DisseminationValue.nc interface DisseminationValue<t> { command const t* get(); command void set( const t* ); event void changed(); }
btrpkt->nodeid = DES;
btrpkt->num = counter;
//发送数据
if(call
AMSend.send(AM_BROADCAST_ADDR,&pkt,sizeof(BlinkToRadioM
sg))== SUCCESS)
18
第6章 TinyOS网络协议
【描述6.D.1】 myDisseminationC.nc #include <Timer.h> #include “BlinkToRadio.h” module myDisseminationC {
uses {
interface AMSend; interface Receive; interface Packet; interface AMPacket; interface Boot; interface Split19Control as RadioControl;
【描述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.DisseminationControl ->
//开启分发服务
call DisseminationControl.start();
counter = 0;
//开启定时器
call Timer.startPeriodic( 2000 );
}
}
event void RadioControl.stopDone( error_t result )
{
;
}
event void Timer.fired()
第6章 TinyOS网络协议 第6章 TinyOS网络协议
6.1 概述 6.2 分发路由协议 6.3 汇聚型路由协议 6.4 CTP协议的实现 小结
1
第6章 TinyOS网络协议 6.1 概述
路由协议一直是无线传感器网络研究的一个重要方向,在 TinyOS 2.x中有两种基本的多跳路由协议:分发路由协议 (Dissemination Protocol)和汇聚型路由协议(Collection Protocol)。分发协议能够可靠地传送小数据项到网络中的每一 个节点;汇聚型路由协议可以把网络中每个节点的小数据项传递 到指定的根节点。本章主要介绍这两种协议以及实现过程。
call RadioControl.start();
}
event void RadioControl.startDone( error_t
result )
{
if ( result != SUCCESS )
{
call RadioControl.start();
}
else
22
第6章 TinyOS网络协议
components new AMReceiverC(MYID); myDisseminationC.Rece17ive->AMReceiverC;
第6章 TinyOS网络协议 (2) myDisseminationC.nc。 在myDissemination文件中实现了小数据的分发协议,首先
分发者获得需要分发的数据,然后将数据发送到网络中;接收者 接收到数据后,按照接收到的数据不同点亮不同的LED,具体代 码如描述6.D.1 myDisseminationC.nc所示。
14
第6章 TinyOS网络协议 2. 编写程序 (1) myDisseminationApp.nc。 在myDisseminationApp.nc文件中列出了实现分发协议所需
要的一系列组件以及组件与组件的关系,具体代码如描述6.D.1 myDisseminationAppC.nc所示。
15
第6章 TinyOS网络协议
8
第6章 TinyOS网络协议 【代码6-2】 DisseminationUpdate.nc interface DisseminationUpdate<t> { command void change(t* ONE newVal); }
9
第6章 TinyOS网络协议
2. 分发协议的组件 在分发协议中有较多的组件,本文将讲解比较重要的组件为 DisseminatorC组件,该组件提供了DisseminationValue接口和 DisseminationUpdate接口。该组件位于“tinyos-2.x /tos/lib/net/drip”,其具体代码如代码6-3所示。 【代码6-3】 DisseminatorC.nc generic configuration DisseminatorC(typedef t, dip_key_t key) {
第6章 TinyOS网络协议
interface StdControl as
DisseminationControl;
interface DisseminationValue<uint16_t>
as Value16;
interface DisseminationUpdate<uint16_t>
as Update16;
2
第6章 TinyOS网络协议
6.2 分发路由协议 分发协议主要用于实现共享变量的网络一致性。网络中的每 个节点都保存有该共享变量的一个副本。分发服务会通知节点该 变量值更改的时间,同时交换数据包以达到整个网络的一致性。 在任意给定时刻,可能会有两个节点的变量值不相同。但过一段 时间后,不一致的节点数会越来越少,最终整个网络都将同一于 一个相同的变量值。分发协议具有以下几个特点: 分发协议能够达到网络的高度一致性,能有效避免临时性通信链 路失效以及高丢包率等网络传输问题。 分发协议要求在有链路连接的情况下确保能够达到某个变量 值一致。
10
第6章 TinyOS网络协议 在DisseminatorC组件中提供了两个参数:参数t和参数key。 参数t:数据包结构类型,其大小必须能够包含单个
if(counter&0x2)
call Leds.led1On();
if(counter&0x4)
call Leds.led2On();
if(counter&0x8)
call Leds.led3On();
}
21
第6章 TinyOS网络协议
event void Boot.booted()
{
//开启无线电服务
3
第6章 TinyOS网络协议 对于不同大小的数据项,分发协议的设计会有很大的不同。 以下内容将讲解分发协议的一系列接口和组件,以及具体的
实现过程。
4
第6章 TinyOS网络协议
6.2.1 相关接口和组件 在TinyOS 2.x中为分发协议提供了实现,下面讲解涉及到的
重要接口和组件。 1. 分发协议的接口 在分发协议中分发服务提供了两个主要的接口:
interface Leds;
interface Timer<TMilli>;
}
}
implementation
Байду номын сангаас
{
20
第6章 TinyOS网络协议
am_addr_t DES = 0x0003;
/*点亮LED任务*/
task void ShowCounter()
{
if(counter&0x1)
call Leds.led0On();
message_t包。 参数key:即键值key,允许创建不同的DisseminatorC实例
组件,类似于AM标识号可以虚拟化AM服务。该键值一般由 unique()函数产生。
11
第6章 TinyOS网络协议
6.2.2 分发协议的实现 以下内容将实现任务描述6.D.1,使用分发协议进行小数据
的发送接收,当节点收到分发者发送的数据时,点亮LED。需要 以下几个步骤:
件。 (2) DisseminationUpdate接口。
7
第6章 TinyOS网络协议 DisseminationUpdate接口用于产生分发的数据,此接口只
包含一个命令函数,该命令有一个指针类型的参数,提供 DisseminationUpdate接口的组件必须将数据赋值到自己分配的 内存中,DisseminationValue接口必须触发change()事件,以 此作为对change()调用的响应。其接口定义如代码6-2所示。
6
第6章 TinyOS网络协议 其中,各个函数的功能如下所述: DisseminationValue.get()命令获取const类型的指针指向
数据区域。 DisseminationValue.set()命令允许节点改变其当前的变
量值,并帮助节点给变量分配一个初始值。 DisseminationValue.changed()触发节点改变变量值的事
(1) 在“cygwin\opt\mytinyos\apps”目录下创建 myDissemination子目录。
(2) 在myDissemination目录下创建并编写 myDisseminationApp.nc文件(核心应用模块)、 myDisseminationC.nc文件(顶层配件)和BlinkToRadioMsg.h文 件(定义相关数据结构体)。
(3) 编写Makefile文件。
12
第6章 TinyOS网络协议 1. 创建myDissemination文件夹 参照6.3.2节创建MultihopOscilloscope文件夹的步骤创建
myDissemination文件夹。创建完成后如图6-1所示。
13
第6章 TinyOS网络协议
图6-1 myDissemination文件夹
16
第6章 TinyOS网络协议
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 new AMSenderC(MYID); myDisseminationC.AMSend->AMSenderC; myDisseminationC.Packet->AMSenderC; myDisseminationC.AMPacket->AMSenderC;
DisseminationValue接口和DisseminationUpdate接口。它们都 位于“tinyos-2.x/tos/lib/net/”目录下。
(1) DisseminationValue接口。 DisseminationValue接口适用于接收从网络中分发过来的数 据,在此接口中包含两个命令函数和一个事件函数,其具体代码 如代码6-1所示。
{
23
第6章 TinyOS网络协议
counter = counter+1;
//设定分发值
call Update16.change(&counter);
btrpkt=(BlinkToRadioMsg*)call
Packet.getPayload(&pkt,sizeof(BlinkToRadioMsg));
5
第6章 TinyOS网络协议 【代码6-1】 DisseminationValue.nc interface DisseminationValue<t> { command const t* get(); command void set( const t* ); event void changed(); }
btrpkt->nodeid = DES;
btrpkt->num = counter;
//发送数据
if(call
AMSend.send(AM_BROADCAST_ADDR,&pkt,sizeof(BlinkToRadioM
sg))== SUCCESS)
18
第6章 TinyOS网络协议
【描述6.D.1】 myDisseminationC.nc #include <Timer.h> #include “BlinkToRadio.h” module myDisseminationC {
uses {
interface AMSend; interface Receive; interface Packet; interface AMPacket; interface Boot; interface Split19Control as RadioControl;
【描述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.DisseminationControl ->
//开启分发服务
call DisseminationControl.start();
counter = 0;
//开启定时器
call Timer.startPeriodic( 2000 );
}
}
event void RadioControl.stopDone( error_t result )
{
;
}
event void Timer.fired()
第6章 TinyOS网络协议 第6章 TinyOS网络协议
6.1 概述 6.2 分发路由协议 6.3 汇聚型路由协议 6.4 CTP协议的实现 小结
1
第6章 TinyOS网络协议 6.1 概述
路由协议一直是无线传感器网络研究的一个重要方向,在 TinyOS 2.x中有两种基本的多跳路由协议:分发路由协议 (Dissemination Protocol)和汇聚型路由协议(Collection Protocol)。分发协议能够可靠地传送小数据项到网络中的每一 个节点;汇聚型路由协议可以把网络中每个节点的小数据项传递 到指定的根节点。本章主要介绍这两种协议以及实现过程。
call RadioControl.start();
}
event void RadioControl.startDone( error_t
result )
{
if ( result != SUCCESS )
{
call RadioControl.start();
}
else
22
第6章 TinyOS网络协议
components new AMReceiverC(MYID); myDisseminationC.Rece17ive->AMReceiverC;
第6章 TinyOS网络协议 (2) myDisseminationC.nc。 在myDissemination文件中实现了小数据的分发协议,首先
分发者获得需要分发的数据,然后将数据发送到网络中;接收者 接收到数据后,按照接收到的数据不同点亮不同的LED,具体代 码如描述6.D.1 myDisseminationC.nc所示。
14
第6章 TinyOS网络协议 2. 编写程序 (1) myDisseminationApp.nc。 在myDisseminationApp.nc文件中列出了实现分发协议所需
要的一系列组件以及组件与组件的关系,具体代码如描述6.D.1 myDisseminationAppC.nc所示。
15
第6章 TinyOS网络协议
8
第6章 TinyOS网络协议 【代码6-2】 DisseminationUpdate.nc interface DisseminationUpdate<t> { command void change(t* ONE newVal); }
9
第6章 TinyOS网络协议
2. 分发协议的组件 在分发协议中有较多的组件,本文将讲解比较重要的组件为 DisseminatorC组件,该组件提供了DisseminationValue接口和 DisseminationUpdate接口。该组件位于“tinyos-2.x /tos/lib/net/drip”,其具体代码如代码6-3所示。 【代码6-3】 DisseminatorC.nc generic configuration DisseminatorC(typedef t, dip_key_t key) {
第6章 TinyOS网络协议
interface StdControl as
DisseminationControl;
interface DisseminationValue<uint16_t>
as Value16;
interface DisseminationUpdate<uint16_t>
as Update16;
2
第6章 TinyOS网络协议
6.2 分发路由协议 分发协议主要用于实现共享变量的网络一致性。网络中的每 个节点都保存有该共享变量的一个副本。分发服务会通知节点该 变量值更改的时间,同时交换数据包以达到整个网络的一致性。 在任意给定时刻,可能会有两个节点的变量值不相同。但过一段 时间后,不一致的节点数会越来越少,最终整个网络都将同一于 一个相同的变量值。分发协议具有以下几个特点: 分发协议能够达到网络的高度一致性,能有效避免临时性通信链 路失效以及高丢包率等网络传输问题。 分发协议要求在有链路连接的情况下确保能够达到某个变量 值一致。