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

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

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

根据所需要实现的功能和上述格式,进行编程设计
在TimerLightC.nc文件中:

#include  "Timer.h"
module  TimerLightC
{
//interface  used
uses  interface  Timer<TMilli>  as  Timer0;
uses  interface  Timer<TMilli>  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文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值