实验名称:基于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组件,与其他组件之间的关系如下框图所示:
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文件