linux 实验定时器,TinyOS实验一·定时器使用及TinyOS的一般编程思路

实验名称:基于TinyOS的定时器使用

使用平台:Telosb节点

使用环境:linux下的TinyOS 2.x开发环境

实验时间:2012-06-27

实验内容:

本实验为自拟实验:节点上电之后启动定时器,同时已对应频率驱动Telosb节点上的LED灯

实验目的:

通过简单的实验理顺基于TinyOS编程的思路,为掌握TinyOS编程打下基础

【准备知识】

TinyOS是为无线传感器网络量身定做的基于模块的开源操作系统,其编程使用nesC语言。首先,从宏观上需要掌握以下框架内容:

1)nesC的应用程序的基本结构式组件,即程序是以组件形式存在的

2)TinyOS是基于事件驱动型的,即由某事件的触发调用某事件响应函数

3)TinyOS中组件分为两种类型:模块(module)和配件(configuration)。前者用于程序代码的具体实现,后者则是用于将其他组件连接起来形成新的组件。相应地,一个组件主要由两种文件形式表述:模块文件(文件形式为:*C.nc)和配置文件(通常表达为*AppC.nc),*为自命名的组件名称。

4)配置文件主用功能是实现组件的声明和连接,其一般格式如下:

configuration *AppC

{

}

implementation

{

//声明组件或组件的实例化

……

//连接组件

……

}

5)模块文件是实现文件,也即相应事件和调用命令的文件,其一般格式如下:

module *C

{

//提供的接口声明或实例化

provides interface ** ;

//使用的接口声明或实例化

uses interface ** as ***;

}

implementation

{

//事件响应和命令调用

}

6)接口:TinyOS中接口是事件和命令的集合,通过接口,可以调用该接口的事件(event)和命令(commands)

如Timer接口中包含的命令和事件如下

Commands:

command uint32_t getdt()

……

Events

event void fired()

调用形式:假设Timer接口的一个实例为Timer0,则事件响应函数如下:

event void Timer0.fired()

【实验步骤】

1、分析实验内容和要求,确定所需组件

从实验内容知,需要使用和定时器有关的组件和驱动LED有关的组件,通过查找和参阅相关资料,得知TimerMilliC组件和LedsC组件,通过帮助文档,得知两个组件所提供的接口,再利用帮助文档查找相关的实现功能(如本实验的点亮LED的事件或者命令)。所需组件分析如下:

节点上电:MainC(提供Boot接口)

定时器:TimerMilliC组件

LED驱动:LedsC组件

2、定义新的组件用以“集合”所需的组件

分析所需的组件之后,定义一个“父”组件,用以集成各组件,也即通过配置文件和模块文件来实现。

如本实验定义组件TimerLightC组件,与其他组件之间的关系如下框图所示:

a4c26d1e5885305701be709a3d33442f.png

3、编程设计配置文件(TimerLightAppC.nc)和模块文件(TimerLightC.nc)

根据所需要实现的功能和上述格式,进行编程设计

在TimerLightC.nc文件中:

#include "Timer.h"

module TimerLightC

{

//interface used

uses interface Timer as Timer0;

uses interface Timer as Timer1;

uses interface Leds;

uses interface Boot;

}

implementation

{

event void Boot.booted()

{

call Timer0.startPeriodic( 250 );

call Timer1.startPeriodic( 500 ); }

event void Timer0.fired()

{

call Leds.led0Toggle();

}

event void Timer1.fired()

{

call Leds.led1Toggle();

}

}

在TimerLightAppC.nc文件中:

configuration TimerLightAppC

{

}

implementation

{

//components

components TimerLightC,MainC,LedsC;

components new TimerMilliC() as T0;

components new TimerMilliC() as T1;

//Links

TimerLightC -> MainC.Boot;

TimerLightC.Timer0 -> T0;

TimerLightC.Timer1 -> T1;

TimerLightC.Leds -> LedsC;

}

4、编写Makefile文件

Makefile文件中:

COMPONENT=TimerLightAppC

include $(MAKERULES)

5、将配置文件、模块文件盒Makefile文件放在同一目录下,在Linux终端输入烧录命令:

make telosb install

烧录程序之后,LED等开始闪烁,与预期效果一致。

【TinyOS编程的一般思路】

分析所要实现的功能-->查找相关组件以及接口-->定义新的“父”组件-->设计配置文件、模块文件和Makefile文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值