教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

TinyOS系统与nesC程序设计课内实验指导书(8)

来源:网络收集 时间:2026-07-10
导读: 2、Cygwin with TinyOS 2.x 3、UltraEdit / EditPlus 四 实验内容和步骤 1、Sense应用程序 Sense应用程序在tinyos-2.x/apps/Sense可以找到,我们先看下它的配置文件SenseApp.nc: configuration SenseAppC { } impl

2、Cygwin with TinyOS 2.x 3、UltraEdit / EditPlus

四 实验内容和步骤 1、Sense应用程序 Sense应用程序在tinyos-2.x/apps/Sense可以找到,我们先看下它的配置文件SenseApp.nc:

configuration SenseAppC { } implementation { components SenseC, MainC, LedsC, new TimerMilliC(); components new DemoSensorC() as Sensor; SenseC.Boot -> MainC; SenseC.Leds -> LedsC; SenseC.Timer -> TimerMilliC; SenseC.Read -> Sensor; } 该文件与BlinkAppC基本类似,再看看模块文件SenseC.nc:

module SenseC { uses { interface Boot; interface Leds; interface Timer; interface Read; } } 与BlinkC.nc一样,SenseC.nc也使用Boot,Leds,Timer接口。另外,它还使用了Read接口。接下来SenseC.nc要做的事情如下:用Boot启动周期性计时器;计时器一到时间,SenseC.nc就signal一个timer事件;读数据是分相操作的,Read.read()和Read.readDone();读完用LEDs显示数据第三位。

Read接口(tinyos-2.x/tos/interface)用来读取传感器的数据 interface Read { /** * Initiates a read of the value. * * @return SUCCESS if a readDone() event will eventually come back. */ command error_t read(); /** * Signals the completion of the read(). * * @param result SUCCESS if the read() was successful * @param val the value that has been read */ event void readDone( error_t result, val_t val ); } 仔细观察,会发现Read接口带有一个类型参数,我们把这样的接口称为泛型接口。泛型接口至少有一个类型参数,提供和使用该接口的组件必须带有同样的类型参数。接下去,我们找出SenseC.nc中使用的Read的提供者:

components new DemoSensorC() as Sensor; SenseC.Read -> Sensor; 值得注意的是,Sense.nc无法知道他所连接的传感器,甚至无法知道是否从传感器得到数据,因为它能导通到任何提供Read接口的组件。

事实上DemoSensorC在不同的平台下是不一样的。平台依赖于DemoSensorC组件来定义应用程序从哪个传感器来采样。例如, DemoSensorC.nc在telosb上的实现与在micaz上的实现是不一样的。 2、DemoSensorC组件 这一节,我们仔细看看DemoSensorC组件的内容,不用的节点平台对它的实现部分是不一样的。举例来说,在telosb上,DemoSensorC实例化了一个组件,名为VoltageC,它从MCU内部的电压传感器中读取数据。但是,在micaz节点没有内置的传感器,所以它返回“假的”传感数据。 然而,怎样才能采集其他传感器的数据,而不是默认传感器呢?其实,这只需要改变DemoSensorC里面的一行代码就可以了。例如,你想要把telosb中的VoltageC组件替换为ConstantSensorC,只要将下面语句更换如下:

components new VoltageC() as DemoSensor; components new ConstantSensorC(uint16_t, 0xbeef) as DemoSensor; 传感器组件常位于每个节点平台的子目录下(tinyos-2.x/tos/platforms),各自的传感器板子目录(tinyos-2.x/tos/sensorboards),或者是在微处理器传感器子目录下(tinyos-2.x/tos/chips)。ConstantSensorC和SinSensorC在tinyos-2.x/tos/system下。 把程序安装到节点,观察结果。 3、Oscilloscope 应用程序 Oscilloscope程序将传感器采集到的数据显示在电脑上。安装此程序的节点周期性的采样默认传感器(通过DemoSensorC),当采集到10个数据时,把它作为一个数据包广播出去。我们再拿一个节点,安装BaseStation程序,它把收到的数据包显示到电脑上。 OscilloscopeAppC.nc配件如下:

configuration OscilloscopeAppC { } implementation { components OscilloscopeC, MainC, ActiveMessageC, LedsC, new TimerMilliC(), new DemoSensorC() as Sensor, new AMSenderC(AM_OSCILLOSCOPE), new AMReceiverC(AM_OSCILLOSCOPE); OscilloscopeC.Boot -> MainC; OscilloscopeC.RadioControl -> ActiveMessageC; OscilloscopeC.AMSend -> AMSenderC; OscilloscopeC.Receive -> AMReceiverC; OscilloscopeC.Timer -> TimerMilliC; OscilloscopeC.Read -> Sensor; OscilloscopeC.Leds -> LedsC; }

部分OscilloscopeC.nc代码如下:

module OscilloscopeC { uses { interface Boot; interface SplitControl as RadioControl; interface AMSend; interface Receive; interface Timer; interface Read; interface Leds; } } 安装有Oscilloscope程序的节点每发送一个数据包,就切换第二盏灯;若是从其他节点那接收到数据包(用于告之自己的序列号或是更改了自己的采样频率),则切换第三盏灯;为了防止无线收发器之间的竞争,会切换第一盏灯; 为了显示传感器采集到的数据,我们首先在cygwin进入/tinyos-2.x/apps/Oscilloscope/java目录,然后输入make,把java文件编译成相应的消息类以及Oscilloscope GUI。 输入./run,将会出现以下界面:

每条不同颜色的线代表一个节点,x坐标表示数据包计数值,y坐标表示传感器数据采集到的数据。 五 实验报告要求

①实验名称 ②实验内容说明 ③程序源代码

④实验步骤,实验中出现的问题,观察到的结果 ⑤实验总结

实验七:存储

一 实验目的

1、 了解TinyOS中的永久数据存储方法。

2、 了解几种不同的需要永久存储的数据及对应的抽象类型。

3、 了解卷(volume)的概念,读懂BlinkConfig和PacketParrot程序。

二 实验原理 1、基本介绍

1.1. 不同种类的永久数据存储:小对象,日志,大对象,TinyOS 2.x分别提供了三个基本存

储抽象:小对象,循环日志和大对象。 1.2. 相关接口: BlockRead

BlockWrite Mount

ConfigStorage LogRead LogWrite Storage.h

1.3. 卷(volume)

①在编译时,TinyOS用一个XML文件把闪存(flash)分成一个或多个固定大小的卷,这些文件叫卷表。每一卷提供一个单独类型的存储对象(配置,日志,块存储)。 ②卷是针对特殊应用的,所以必须放在应用程序的文件夹中且命名为volumes-CHIPNAME.xml(CHIPNAME是特定平台的闪存芯片名)。 2、存储配置数据

2.1. 配置数据可能出现在以下特点:这些数据的大小有限;它们的值不统一;值未知;值与

硬件相关。

2.2. 为什么配置数据必须存留:

①校准:传感器的校准系数是出场配置的,持久的

②设备标识:设备标识一旦分配给一个节点,这些值应该持久。

③定位:节点位置数据可能在编译时不知,只有在运行时可见,需要存储。 ④传感:传感与发出信号过程的参数 这些都需要这种类型的数据存储。 2.3. 如何使用Mount和configuration 3、日志数据

3.1. 事件和小数据项的自动日志记录是一种常见的应用。日志数据不应该丢失,日志可以是

线性的,也可以是循环的。

3.2. LogStorage抽象支持上面的日志要求。日志是基于记录的,每一次调用LogWrite.append()

时就会创建一个新的日志。

3.3. Pack …… 此处隐藏:2330字,全部文档内容请下载后查看。喜欢就下载吧 ……

TinyOS系统与nesC程序设计课内实验指导书(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/447636.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)