参考www.tinyos.net :
试验二:MicaZ-TinyOS2.x平台下LED试验:Blink
——TinyOS编程的“Hello World”程序
--------------------------------------------------------------------------------------------
date: 2011-06-24
更新内容:添加MIB520的使用
更新原因:又拿到一块MIB520板子,学习一下如何使用MIB520给MicaZ节点烧写程序
更新文档:放在此实验的最后部分。
--------------------------------------------------------------------------------------------
试验目的:。通过试验一熟悉MicaZ硬件平台及MicaZ程序烧写,能够熟练MicaZ平台使用LED灯。其功能是实现MicaZ节点上三个LED灯闪烁,其中红,绿,黄灯闪烁频率分别为4Hz,2Hz,1Hz。并对Blink程序进行修改,熟悉nesC语言,及TinyOS2.x系统程序框架。
本实验所需硬件平台:1个micaz节点,1块mib510板,1根串口线。
一:熟悉硬件平台
图1所示的是试验用到的处理器&射频平台MicaZ节点(MPR2400CA)(注:MPR2400CA是MicaZ,MPR4x0是Mica2,MicaZ的射频频率为2.4G,Mica2的射频频率为433-900M),图2是基于串行端口的编程设备MIB510CA,图3是基于以太网的编程设备MIB600CA。
图1处理器&射频平台MicaZ(MPR2400CA) 图2基于串行端口的编程设备MIB510CA
图3 基于以太网的编程设备MIB600CA
MIB510CA允许使用一个串行界面和其他标准计算机平台一样在PC上传感器网络数据聚集。除数据传送外,MIB510CA也提供一个RS-232串行编程界面。
MIB600CA提供Ethernet(以太网)(10/100 Base-T)与“智能尘埃”MICA/IRIS家族的连接用于通讯和系统内编程。MIB600CA允许通过TCP/IP远程进入传感器网络数据。MIB600CA串行服务器与其他网络装置一样直接与一个10 Base-T LAN相连接。MIB600CA可连接一个网络中的“有线”和“无线”装置。MIB600CA也是传感器数据的一个有效管道。
接下来的试验我们均采用MIB510板+MicaZ节点。
使用MIB510首先要注意几点:
1).MIB要给节点烧程序的时候,要把switch开关拨到‘ON’的位置
2).MIB要做普通传感器基板时,要把switch开关拨到‘OFF’的位置,否则,节点无法正常通信
3).使用MIB510的命令行是:
make [re]install <addr> <platform>
这里要注意,如下两个地址是保留值,不可使用:
TOS_BCAST_ADDR(0xFFFF)和TOS_UART_ADDR(0x007E)。
例如,一个MicaZ平台,要设置节点ID为110,并使用串口1连接MIB510,那么应输入命令为:
make micaz install,110mib510,com1
二:连接MIB510和MicaZ节点
MIB510和MicaZ节点是由一个51针的连接槽连接起来的,其硬件图如图4所示
图4 MicaZ连接槽51针
MicaZ节点上的红、绿、黄三个LED通过连接槽连接到MIB510基板上相对应的红、绿、黄三个LED。这样,既方便了在调试程序的时候查看LED状态,同时也可以检测连接槽是否接触良好。
(本人在做试验的时候,经常没有把节点在槽中插牢固,起初总以为是接触不良)
三:应用程序源码分析
打开cygwin,进入到/opt/tinyos-2.x/apps/Blink目录下,如下图所示,可以看到tinyOS自带的用于LED闪烁的例子Blink,下面将通过分析该例子程序来认识和了解tinyOS以及nesC编程语言。
其中,目录下含有BlinkAppC.nc、BlinkC.nc文件以及Makefile文件,nc为后缀的文件是用nesC语言编辑的应用程序源文件,Makefile文件生成可执行文件时供make工具调用。
Blink应用程序由两个组件组成:一个名为“BlinkC”的模块,其所在文件为“BlinkC.nc”,和一个名为 “BlinkAppC”的配件,其所在文件为 “BlinkAppC.nc”。请记住,任何一个应用程序都有一个用应用程序名命名的顶层配件,在此处,配件BlinkAppC就是Blink应用程序的顶层配件,nesC编译器根据该文件的内容产生可执行文件。另一方面,模块BlinkC提供Blink应用程序的实现代码。正如所想的,Blink配件是用来连接组件:BlinkC模块和Blink应用程序用到的其它组件的。
让配件和模块之间有所区别的理由是:配件允许系统设计人员快速建立程序。例如:设计者设计一个应用程序可以只提供一个配件,这个配件只是简单地将一个或多个模块连接起来,而此时设计者实际上并没有实现任何东西。同样地,另一个开发人员会提供可以在广泛范围应用程序中使用的“库”模块。
3.1 Blink配件:BlinkAppC.nc
nesC 的编译器为ncc,它可以将包含顶层配件的文件编译成可执行的应用程序。一般而言,TinyOS应用程序还拥有一个标准的Makefile文件,允许进行平台选择以及在调用ncc时使用某些适当的选项。
让我们先看看Blink程序的配件:BlinkAppC。
nesC 的编译器为ncc,它可以将包含顶层配件的文件编译成可执行的应用程序。一般而言,TinyOS应用程序还拥有一个标准的Makefile文件,允许进行平台选择以及在调用ncc时使用某些适当的选项。
让我们先看看Blink程序的配件:BlinkAppC。