当前位置:首页 >> 信息与通信 >>

TinyOS学习报告2


西安电子科技大学软件学院

TinyOS 学习报告
第二周报告

学院:软件学院 姓名:刘佳 日期:2009/12/31

本周主要学习了:
Lesson 8 Resource Arbitration and Power Management

Lesson 11 TOSSIM

Lesson 12 Network Protocols Dissemination and Collection (Old Link) Dissemination Tymo Deluge T2 BLIP Tutorial Lesson 13 TinyOS Toolchain Lesson 15 The TinyOS printf Library

Lesson 8
本课主要介绍了TinyOS资源仲裁(resource arbitration)以及电源管理模型。

一、引言
1. TinyOS有三种不同的资源抽象(resource abstraction): 专用的(dedicated), 虚拟 化的(virtualized)和共享的(shared)。 2. 专用抽象:代表一种资源,它的子系统总是需要互斥存取。这种类型的资源 提供 AsyncStdControl,StdControl 或者 SplitControl 接口中的一种控制他们的电 源状态。 3. 虚拟抽象:通过软件虚拟化隐藏相互间多个客户。虚拟资源的电源状态进行

自动控制。 4. 当一个资源总是被单个组件控制,则专用抽象将很有用;当用户想用一个简 单的方式分享资源而进行全局的控制,则虚拟抽象很有用。 5. 分享资源 ①分享资源的一个例子:总线 ②在 TinyOS 中, 一个资源仲裁者负责一个共享资源在不同用户之间的多路复 用。 ③分享资源本质上是建立在专用资源的基础上,它的访问权限由一个仲裁组 件来控制。 ④分享资源配置:

共享资源抽象给用户提供的接口仅有 Resource 和 ResourceRequested 接口。

二、ShareResourceDemo 应用程序
1. 功能:用共享资源方法使三个 LEDs 来回闪烁(可用轮转或先来先服务) 2. 涉及到得内容:

①为用户导通共享资源 ②用 Resource 接口获得对共享资源的访问 ③改变仲裁策略 ④封装专用资源并且导通电源管理组件

Lesson 11
本课主要介绍了 TOSSIM 仿真。

一、 引言
1. TOSSIM 仿真整个 TinyOS 应用,它通过仿真实现来取代组件。但其缺少捕捉 实际芯片行为的保真度。 2. TOSSIM 是一个 TinyOS 库。必须编写一个程序配置并运行仿真。TOSSIM 支持 两种编程接口:Python 和 C++。

二、编译 TOSSIM
1. 每一个 TinyOS 源目录下有一个可选择的 sim 子目录, 它包含那个包下的仿真 实现。 2. 为了编译 TOSSIM,可以在 make 后加 sim 选项: $ make micaz sim 现在 micaz 是唯一被 TOSSIM 支持的平台。 3. Make 系统为仿真执行的五个基本步骤: ①产生一个 XML 文档来描述应用 ②编译 TinyOS 应用程序(这一步产生一个 sim.o 对象文件) ③编译编译接口(对 Python 和 C++的支持)

④构建一个共享库(包含 TOSSIM 代码,C++和 Python 支持) ⑤拷贝 TOSSIM 到当前目录下

三、用 Python 运行 TOSSIM
1. 在Python中运行仿真有两种方式: ①写一个脚本,然后让Python去运行它 ②使用Python交互 2. 启动 Python 解释器: $ python ①我们所做的第一件事就是导入 TOSSIM 并创建一个 TOSSIM 对象 >>> from TOSSIM import * >>> t = Tossim([]) ②运行一个仿真: >>> t.runNextEvent() 0 返回 0,意味着没有下一个事件运行,因为没有任何节点可以引导。 ③例如:告诉 mote 32 在时间 12345 时引导并运行第一个事件(booting): >>> m = t.getNode(32) >>> m.bootAtTime(12345) >>> t.runNextEvent() 1

四、调试语句:dbg 调试语句:
1. dbg:TOSSIM 的调试输出系统,有四种调试调用: ①dbg ②dbg_clear ③dbgerror

④dbgerror_clear 3. dbg()带两个参数: ①第一个参数定义输出的通道(channel) ②第二个和子序列参数是输出信息和变量的格式 dbg()与 C++中 sprintf 语句等同。 4. 打印语句: ①首先在事件中加入调试语句: 如:dbg(“Boot”,”Application booted.\n”) ②然后重新编译应用程序 ③可以输出到文件,或标准输出,以后者为例: >>> import sys //为标准输出导入 sys python 包 >>>t.addChannel(“Boot”,sys.stdout); >>> t.runNextEvent() DEBUG (32) : Application booted. 1

五、配置一个网络
1. 要想仿真网络行为,必须明确一个网络拓扑结构。缺省的 TOSSIM radio 模型 是基于信号的,我们要提供描述传播强度的数据集;明确噪音和接收器敏感 度。 2. TOSSIM 仿真 RF 噪音,使用 CPM 算法:把噪音追踪作为输入,并产生一个统 计的模型。用一个噪音文件给节点一个噪音模型:

noise = open("meyer-heavy.txt", "r") lines = noise.readlines() for line in lines: str = line.strip() if (str != ""): val = int(str)

//存储噪音追踪的文件

for i in range(0, 7): t.getNode(i).addNoiseTraceReading(val) //加到节点中 for i in range(0, 7): t.getNode(i).createNoiseModel()

//为每个节点创建噪音模型

3. Radio 对象处理物理层传输,MAC 对象处理数据链路层: >>> from TOSSIM import * >>> t = Tossim([]) >>> r = t.radio() >>> mac = t.mac() >>> t.runNextEvent()

//获得一个 radio 对象的引用 //获得一个 MAC 对象的引用

4. 用文件描述拓扑结构,用 Python 脚本把它们存储到 radio 对象中: ①描述文件每一行有三个值:源,目的地和增益。 ②把拓扑结构存储到 radio 对象中: >>> f = open("topo.txt", "r") >>> lines = f.readlines() >>> for line in lines: ... s = line.split() ... if (len(s) > 0): ... print " ", s[0], " ", s[1], " ", s[2]; ... r.add(int(s[0]), int(s[1]), float(s[2]))

六、变量
1. TOSSIM 支持在运行 running 时检查变量,当前,只支持基本类型。 2. 当编译 TOSSIM 时,make 系统产生的 XML 文件中包含 TinyOS 程序的很多信 息,需要用一个 Python 对象来从语法上对 XML 文件分析,并提取相关的信 息。 3. 执行过程: ①导入 python 对象,从语法上分析 XML 文件:

from tinyos.tossim.TossimApp import * n = NescApp() ②通过调用 variables 函数从 NescApp 对象中取出变量列表 vars = n.variables.variables() ③把变量列表传递给 TOSSIM 对象 t = Tossim(vars) 现在,TOSSIM 对象知道了 TinyOS 应用中所有变量的名字,大小以及类型。 ④因为每个微粒有他自己的实例,所以需要从特定的微粒中取出变量。

m = t.getNode(0) v = m.getVariable("RadioCountToLedsC.counter") ⑤取出变量值

counter = v.getData()

七、注入分组
1. TOSSIM 允许动态的向网络中注入包。 2. 执行步骤: ①产生一个 Python 包类(如果一个应用有包格式,可以为它产生一个包类, 然后实例化包类,TinyOS 支持构建 Python 包对象)如: BUILD_EXTRA_DEPS = RadioCountMsg.py RadioCountMsg.class ② RadioCountMsg.py 定义了包的格式,但需要通过 AM 发送。

③将数据插入 AM 的有效载荷中 from RadioCountMsg import * msg = RadioCountMsg() msg.set_counter(7); pkt = t.newPacket(); pkt.setData(msg.data) pkt.setType(msg.get_amType()) pkt.setDestination(0) ④发送包到指定的节点 //为包含包的格式,必须导入 //创建一个 Python 包对象 //设置值 //获得一个 AM 包 //往包中 //填充 //数据

pkt.deliver(0, t.time() + 3)

Lesson 12
本课包含五个小章节,主要介绍了网络协议。

Section 1
本小节介绍 TinyOS-2 中两个基本的网络基元:Dissemination 和 Collection

传播( 一、 传播(Dissemination) )
1. 传播协议的目标:可靠地发送数据到每个节点。 2. 传播提供了两个接口: ①DisseminationUpdate 接口: //用于生产者,每当它想传播 //一个新值,应该 call change()

interface DisseminationUpdate<t> { command void change(t* newVal); }

②DisseminationValue 接口: //用于消费者,每当传播的 //值改变时,则 signal changed() //get() 是获得新值

interface DisseminationValue<t> { command const t* get(); event void changed(); } 3. 一个简单的应用:EasyDissemination

功能:一个节点周期地传播一个 counter 值到网络中的其他节点

二、收集(Collection) 收集
1. 收集是对传播操作的一个补充,它由收集网络中产生的到基站的数据构成。 一般是构建一个或多个收集树,每棵树以基站为根。 2.简单应用:EasyCollection 功能:节点周期性的发送信息到基站,基站收集所有的数据

Section 2
本小节介绍 TYMO

一、 TYMO
1. Tymo 是 Dymo 协议在 TinyOS 上的实现,它是针对移动自组织网络的一个点 对点的路由协议。 2. 在 TYMO 中,我们在 AM 栈的基础上改变它的包的格式和执行它。

二、DYMO:随需动态移动自组织网络 随需动态移动自组织网络
1. 作为一个被动形态的协议,DYMO 并不明确存储网络拓扑,只有当需要时, 节点会计算到期望目的地的一个单一传播路由。

2.当一个节点需要一个路由,它发出一个路由请求(RREQ) ,当这个包到达目 的节点(或有一个新的路由到目的节点的节点) ,这个节点会回应一个路由回 复(RREP) 。 3. 当一个节点接收到 RREQ 或 RREP 事,它会缓存位于链路层的发送者和初始发 送者。当路由长时间未被用时,它会被删除。

三、MH 多跳
1. DYMO的目的:根据需要找到路由 2. MH:传输协议,除了目的节点外,它只用来转法包。

四、用法
1. 为了发送和接收 MH 信息,应该声明以下接口: module TestM { uses { interface SplitControl; interface AMPacket as MHPacket; interface Packet; interface Receive; interface AMSend as MHSend; } } 2. DymoNetworkC 是一个导通了所有基于 DYMO 服务来提供 MH 服务的组件的 一个组件。它提供了接收、发送接口数组,以便若干应用可以同时使用 MH。 3. 导通关系: implementation { components TestM, DymoNetworkC; TestM.SplitControl -> DymoNetworkC; TestM.Packet -> DymoNetworkC; TestM.MHPacket -> DymoNetworkC; TestM.Receive -> DymoNetworkC.Receive[1]; TestM.MHSend -> DymoNetworkC.MHSend[1];

}

五、配置
可以设置一些预处理变量去选择 DYMO 的特性

六、开发者文档
1.体系结构 ①概述:TYMO 设计是针对与传感器网络基于模块化网络层的 ②原始层次:被分为两个部分: 数据面板 控制面板:实现路由算法 ③实现层次: 目标:提供一个组件给应用,使得它在一个多跳网络中能够透明地发送和 接收数据。 (DymoNetworkC 组件) 2.DYMO 服务 3.MH 服务 4.路由表

七、路由接口
为了组建网络层并且使组件相互通信,还需要一些新的接口: 1. 2. 3. 4. 5. Routing 接口 DymoTable 接口:针对 DYMO,为用户提供更多的信息和控制权 Packet 接口:在位水平上操作一个包 DymoPacket 接口:有知道 DYMO 包的内部格式的组件提供 RouteSelection 接口:让 MH 服务的路由引擎决定应该对包做些什么

Section 3
本节主要介绍 Deluge T2

一、引言
1.Deluge 是针对大对象的可信数据传输协议,如:程序二进制文件。 2.Deluge T2 是由 TinyOS 1.x 中的 Deluge 2.0 为适用于 TinyOS 2.x 而导出的。 3.Deluge T2 处于试验性阶段,默认情况下有 4 个闪存容器

二、工具安装
1. DelugeT2 需要一些不包含在官方 tinyos-tools RPM 包中的 Python 脚本。 2. 安装步骤: % cd $TOSROOT/tools % ./Bootstrap ... % ./configure ... % cd tinyos/misc % make ; make install ...

三、快速启动 四、重编程一个网络
主要介绍如何插入一个程序映像及怎样提取版本信息 1. 建立一个基站 一个基站是一个特殊的微粒,它运行一部分 Deluge T2(允许微粒通过串口接 收映像并发送到其他的微粒)

tinyos-2.x/apps/tests/deluge/Basestation
为一个微粒安装基站程序:

% make telosb install,1 bsl,/dev/ttyUSB0 2. 建立客户端微粒 用 golden 映 像 作 为 程 序 为 其 他 微 粒 进 行 初 始 化 。 Golden 映 像 位 于

tinyos-2.x/apps/tests/deluge/GoldenImage
% make telosb install,1 bsl,/dev/ttyUSB0 3. 准备应用程序: 确保应用程序包含 DelugeC 组件,还应该包含一个 volumes-xxx.xml 文件去定 义 goldenimage,deluge1,deluge2 和 deluge3。 4.插入一个新映像 在新的映像被发送到网络中,应该首先把它插入基站。 5.用新的映像重新编程 传播新的映像给网络中剩余的微粒

Section 4
本节主要介绍 BLIP(伯克利低功耗 IP 栈)

一、 目标和预备
1.介绍如何安装和配置一个基于 IPv6 子网的 blip。 2. Blip 路由器只被 linux 支持 3. 每个运行 blip 网络栈函数的微粒作为一个路由器,从而这些微粒形成一个多 跳的 IP 子网。

二、配置综述
1. 配置步骤: ①安装并激活边缘路由器 ②配置到其他网络的路由(可选) ③开始激活 blip 节点路由 2.平台支持:Blip 在 6lowpan 和 IEEE802.15.4 上提供了一个 IPv6 层。因为它不 使用 AM 层,所以它需要一些无线通信设备支持去提供一个分离消息发送的 机制。

三、低功耗侦听 LPL
1. 使主板路由器能够LPL 2. 使所有的节点路由能够 LPL

四、编程接口
Blip 允许构建你自己的基于 IP 的应用 1. 地址结构: 两个重要的地址结构: #include <ip.h> struct in6_addr { union { uint8_t u6_addr8[16]; uint16_t u6_addr16[8]; uint32_t u6_addr32[4]; } in6_u; #define s6_addr #define s6_addr16 #define s6_addr32

in6_u.u6_addr8 in6_u.u6_addr16 in6_u.u6_addr32

}; struct sockaddr_in6 { uint16_t sin6_port; struct in6_addr sin6_addr; }; 2. UDP Blip 提供了一个 UDP 套接字作为一个基本的应用传输服务。 3. TCP TCP 栈仍处于试验性阶段,不能保证性能和可靠性 4. 网络编程 Nwprg 使用 Deluge 已有的机制,但是使用 UDP 代替 Deluge 的分发算法进行 简单的传输。

Lesson 13
本课主要介绍 TinyOS 工具的一些细节

一、 构建应用
TinyOS 使用 make 工具来构建 TinyOS 应用,它通过传递参数来明确的平台, 期望的行为和各种选项。

二、自定义构建系统
可以根据自己需要,在 support/make 目录下修改 Makelocal 文件,来设置 一些参数:

MIB510 ?= /dev/ttyS1 PFLAGS = -DCC2420_DEF_CHANNEL=12

// PFLAGS 额外的选项传递给编译器

三、Makefile
1.Makefile的最简形式: COMPONENT=TopLevelComponent include $(MAKERULES) //说明顶级配置

2.通常需要对nesC编译器明确一些选项,构建一些额外的文件。
BUILD_EXTRA_DEPS:明确一些额外的make目标

四、TinyOS 工具
1.Makefile 使得为应用程序构建系统更加容易,但是这些不是强制的。 2.可以使用自己的构建脚本: ①首先编译应用程序(ncc) ②安装程序到微粒上(usip)

Lesson 15
本课主要介绍如何使用最新版本的 printf 库去调试应用程序。

一、 概述
1. 传统的调试应用程序时费时的,尽管像 TOSSIM 这样的仿真可以验证逻辑正 确性,然而当真正安装到硬件上时,会有不可避免的错误。也可以提供应用 程序去打印输出到终端屏幕,但像 gdb 这样的工具只能逐步查看。 2. 很多时候开发者希望快速打印, TinyOS 的 printf 库通过微粒与 PC 连接的串行 端口为应用程序提供了这样的终端打印函数。

3. 使用注意:开发者需要在顶级配置中包含 PrintfC 组件,以及在用到 printf 的 组件中 include 一个“printf.h”头文件。

二、printf 库组成
整个 printf 库只包含 4 个文件:一个模块,一个配置,一个接口和一个头文件。 ①MainC.nc:导通 MainC 系统组件的一个阴影版本进而自动启动打印子系统 ②PrintfC.nc:为 TinyOS 应用提供 printf 功能的配置文件 ③PrintfP.nc:实现 printf 功能的模块 ④Printf.h:明确打印信息的格式以及闪存缓冲大小的头文件

三、使用 printf 字库
1.不像以前的版本,明确导通到printf 特定的组件是不必要的,我们需要做的 一切就是将应用的接口导通到MainC。

configuration TestPrintfAppC{ } implementation { components MainC, TestPrintfC; TestPrintfC.Boot -> MainC; } 2. 首先给微粒安装应用程序并查看它是哪种输出, 然后启动PrintfClient去查看产 生的输出。 3.注意:当启动 PrintfClient 时必须是使用 PC 与 mote 的通信串口。

本周总结
本周主要学习了 TOSSIM 仿真,网络协议,打印库和 TinyOS 工具的一些基本 知识。 因为这阶段主要是学习理论, 所以没有很多上机实践。 只是在学习 TOSSIM

时对以前的几个程序进行了仿真,感觉不错。希望早些将一些基本的理论知识学 习后,开始付诸于实践。


相关文章:
TinyOS学习报告2
TinyOS学习报告2_信息与通信_工程科技_专业资料。TinyOS学习报告2西安电子科技大学软件学院 TinyOS 学习报告第二周报告 学院:软件学院 姓名:刘佳 日期:2009/12/31 ...
课程2
课程 2、C 语言程序设计 使用清华大学出版社《C ...学习各种无线 RF 通讯技术与标准,Zigbee, 蓝牙, ...嵌入式系统(包括 、嵌入式系统技术, TinyOS 等 IoT...
TinyOS_2.x_入门教程
TinyOS_2.x_入门教程_计算机软件及应用_IT/计算机_...更是学习多种单片机编程的上佳资料;对操作系统爱好...nesC 编译器在编译期间给程序 员报告潜在的数据竞争...
C语言2
19页 2财富值 c语言第2章 61页 1财富值 C语言习题集2 8页 免费喜欢此文档的还喜欢 NesC学习经验总结 3页 免费 C语言课程总结文本 15页 免费 TinyOS 6页 ...
一步步教你搭建TinyOS2.1.2开发环境
一步步教你搭建TinyOS2.1.2开发环境_计算机软件及应用_IT/计算机_专业资料。...tinyos 学习之旅开始啦! 文档贡献者 胡先森Harold 贡献于2015-07-31 1/2 ...
lesson 2 tinyos
TinyOS学习报告2 19页 10财富值 TinyOS 2 Overview 10页 免费 TinyOS 2.0在CC2430上的移... 4页 免费 基于Cygwin的TinyOS学习资... 18页 1财富值如要投诉违...
Lab 2Learn Lesson 2
i++) {} if (i >= 400000) { i = 0; } else { post computeTask(); } } Interfaces, Commands, and Events Go back to tinyos-2.x/apps/Blink...
TinyOS 2.x 入门教程
nesC 编译器在编译期间给程序 员报告潜在的数据竞争。编译器也可能会产生错误的...基于Cygwin的TinyOS学习... 18页 1下载券 TinyOS-2 64页 5下载券©...
TinyOS 2.x 入门教程
TinyOS 2.x 入门教程_IT/计算机_专业资料。TinyOS入门...请先学习 C 方面内容,以便可以进一 步学习此教程...nesC 编译器在编译期间给程序 员报告潜在的数据竞争...
TinyOS 实验报告
TinyOS 实验报告_计算机软件及应用_IT/计算机_专业资料。物联网无线传感网络实验...1/2 相关文档推荐 tinyos学习全程指导7页 1下载券 TinyOS入门 22页 免费 ...
更多相关标签: