通过调用这些命令函数和实现这些事件函数,我们可以实现各种LED灯的控制和闪烁效果。例如,我们可以通过调用set命令函数设置LED灯的亮度,通过调用timer.fired事件函数控制LED灯的闪烁频率和模式,从而实现各种闪烁效果。
总之,Blink组件的功能主要是控制LED灯的闪烁,通过调用命令函数和实现事件函数来实现LED灯的控制和闪烁效果。
二、Blink组件相关关系
TinyOS的编程方式采用nesc语言,这是一种类C语言,nesc语言有几个最重要概念:组件,接口,模块。如下图BlinkC程序组件图:
图1.1:Blink程序组件图
- 每一个程序都是由若干组件(component)组成;
- 组件有两种类型,一种是模块(module),另一种是配置(configuration);
- 配置文件的作用是表明组件之间的关系。模块文件的作用是将程序的具体实现放在其中;
- 每个程序都需要一个顶层的配置文件,它的名字是用程序名字命名。
从上图可以发现,BlinkC这个组件是由MainC,TimeMilliC,LedsC组件组成。
- 每个component都提供以及使用 interface;
- Component提供的interface说明了该组件为使用者提供的功能;
- Component使用的interface说明了该组件需要用到的由其他组件提供的功能。
- 接口常使用的关键词是command和event。
主要组件及接口的功能介绍:
MainC是blink组件的主要控制器,负责协调各个组件之间的通信和数据传输。
BlinkMilliC是一个定时器组件,用于控制数据采集和传输的时间间隔。
Leds组件用于控制传感器和无线模块的LED指示灯。
boot是一个启动组件,用于初始化blink组件和相关硬件设备。
Timer接口用于控制数据采集和传输的
从图1.1中,箭头的名字表示组件与组件之间访问使用的接口。下面我们结合程序来看下组件、接口、模块的概念。时间间隔。这些接口可以帮助用户构建高效、安全的无线传感网系统。
三、blink目录下三个文件及其源码
Blink目录下面包含Makefile、BlinkAppC.nc、BlinkC.nc三个文件。
BlinkAppC.nc
源码:
configurationBlinkAppC//表示这是一个名为BlinkAppC的配置
{
}
implementation
{//组件申明
componentsMainC,BlinkC,LedsC;
componentsnewTimerMilliC()asTimer0;
componentsnewTimerMilliC()asTimer1;
componentsnewTimerMilliC()asTimer2;
//组件间使用关系定义
BlinkC->MainC.Boot;
BlinkC.Timer0->Timer0;
BlinkC.Timer1->Timer1;
BlinkC.Timer2->Timer2;
BlinkC.Leds->LedsC;
}
在implementation关键字后面的括号内是配置的具体实现。components关键字后面表明了这个配置文件所引用的组件,在这里分别是Main、BlinkC、LedsC以及三个TimerMilliC组件。最后五行表明了各组件间的provider和user的关系。A->B表示了一种关系,其中A为使用方(user),而B为提供方(provider)。命令(command)就是接口提供方已经实现的函数。事件(event)就是需要接口使用方实现的函数。
BlinkC.nc
源码
module BlinkC @safe() //声明了使用到的接口名称,具体语法可以详细查看Nesc语法。
{
uses interface Timer as Timer0;
uses interface Timer as Timer1;
uses interfac