文章目录
- 物联网竞赛入门
-
- 第一天
-
- 初识TinyOS
-
- TinyOS是什么?
- TinyOS的编程方式
-
-
- Modules(模块)
- Configuration(配置)
- Interfaces(接口)
- Headers(头文件)
- NesC语言编程格式
-
物联网竞赛入门
by:阿程 vx:1764930806
本文章使用GEN-0200B新型物联网传感器节点硬件作为实验器材
使用平台:物联网教学平台
第一天
初识TinyOS
TinyOS是什么?
简单来说就是一个专为嵌入式无线传感网络设计的操作系统
TinyOS的编程方式
TinyOS的编程方式采用NesC语言,这是一种类C语言。NesC语言重要概念(组件,接口,模块)
Modules(模块)
provide code that implements one or more interfaces and internal behavior
提供实现一个或多个接口和内部行为的代码
Configuration(配置)
link together components to yield new component
将组件链接在一起以生成新的组件
Interfaces(接口)
logically related set of commands and events
逻辑上相关的命令和事件集
Headers(头文件)
Define parameters
定义参数
NesC语言编程格式
- Makefile 文件
- ~AppC.nc 文件
- ~C.nc 文件
- ~.h 头文件
Makefile文件
可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等。编译整个工程需要涉及到的,在 Makefile 中都可以进行描述。换句话说,Makefile 可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。
~AppC.nc 文件
配置(configuration)命名以AppC.nc结尾。申明组件及定义组件的使用关系。包含在接口和配置中的事件是你决定执行的逻辑连接
configuration BlinkAppC //表示这是一个名为BlinkAppC的配置
{
}
implementation
{ //组件申明
components MainC, BlinkC, LedsC;
components new TimerMilliC() as Timer0;
components new TimerMilliC() as Timer1;
components new TimerMilliC() as Timer2;
//组件间使用关系定义
BlinkC -> MainC.Boot;
BlinkC.Timer0 -> Timer0;
BlinkC.Timer1 -> Timer1;
BlinkC.Timer2 -> Timer2;
BlinkC.Leds -> LedsC;
//在这里我们通常把一个组件的申明和使用关系定义写在一起,区分为一个个模块,上述组件可写成:
//main组件
components MainC, BlinkC;
BlinkC -> MainC.Boot;
//leds组件
components LedsC;
BlinkC.Leds -> LedsC;
//timer组件
components new TimerMilliC() as Timer0;
components new TimerMilliC() as Timer1;
components new TimerMilliC() as Timer2;
BlinkC.Timer0 -> Timer0;
BlinkC.Timer1 -> Timer1;
BlinkC.Timer2 -> Timer2;
}
~C.nc 文件
模块(module) 命名以C.nc结尾。模块是公共事务的体现
module BlinkC @safe() //声明了使用到的接口名称
{
uses interface Timer as Timer0;
uses interface Leds;
uses interface Boot;
}
implementation
{
event void Boot.booted()
{
call Timer0.startPeriodic( 250 ); //每250ms触发一次event void Timer0.fired()
call Timer1.startPeriodic( 500 );
call Timer2.startPeriodic( 1000 );
}
event void Timer0.fired()
{
dbg("BlinkC", "Timer 0 fired @ %s.n", sim_time_string());
call Leds.led0Toggle(); //使0号LED灯状态反转
}
event void Timer1.fired()
{
dbg("BlinkC","Timer 1 fired @ %s n", sim_time_string());
call Leds.led1Toggle();
}
event void Timer2.fired()
{
dbg("BlinkC", "Timer 2 fired @ %s.n", sim_time_string());
call Leds.led2Toggle();
}
}