论文部分内容阅读
[摘 要]TinyOS是由U.C.Berkeley专为嵌入式无线传感网络设计开发的开源操作系统,GAINZ是中科院计算技术研究所开发的无线传感器节点平台。由于TinyOS系统并未加入对GAINZ节点的底层支持,在TinyOS中开发的网络协议与应用程序无法直接运行于GAINZ节点上,因此进行TinyOS的移植就需要对GAINZ节点模块进行相应的驱动程序设计。对TinyOS生成的例子和编写的应用组件message进行仿真测试和烧录到GAINZ节点测试,Blink测试程序使得节点上的Led灯(红、绿、黄灯)以不同的频率闪烁,编写的应用组件程序message使得发送节点红灯先亮,接收节点绿灯后亮。测试结果表明,在GAINZ上移植TinyOS是可行的。
[关键词]无线传感器网络(WSN);TinyOS移植;nesC;GAINZ
中图分类号:TP212 文献标识码:A 文章编号:1009-914X(2014)33-0144-01
1、引言
无线传感器网络(Wireless Sensor Network, WSN)是当前在国际上备受关注的前沿热点研究领域。目前,国内许多学者已经证明了TinyOS的可移植性,也实现了TinyOS在不同芯片(如51单片机、PIC微处理器、无线单片机CC1010、CC2430、嵌入式开发板GENE-8310、LCP2136FBD64等等)上的移植,并提出了很多改进方法,如采用基于FIFO的动态优先级调度策略、引入抢占式任务调度策略等在任务调度策略上的一些改进。针对不同的应用,对TinyOS系统的要求也不一样,这就需要我们对TinyOS的组件进行相应的重建或修改。对不同平台上移植TinyOS,并让其正确运行,达到与平台良好的融合是目前TinyOS移植的最终目标。由于我们选择的开发平台是中科院研发的GAINZ节点平台,而TinyOS系统并未加入对GAINZ节点的底层支持,本文针对GAINZ自身的特点,分析了TinyOS的移植性,并比较GAINZ节点和MICAZ节点的异同,修改组件和编写应用组件实现了TinyOS的移植。个可行的研究平台。
2、GAINZ节点
GAINZ节点是由中科院计算所研发的无线传感器网络节点平台,它兼容2.4G无线传感器网络节点,在传输距离、功耗等方面具有一定的优势。GAINZ采用低功耗微处理器芯片ATMEGL128,射频部分采用的是CHIPCON CC2420芯片,扩展存储采用容量达512KB的低功耗FLASH存储器。整个系统采用了通用的接口插槽,将传感、处理和通信模块进行分离,可以实现按照不同的应用需求进行不同的扩展[1]。
TinyOS支持的硬件平台中有MICAZ,MICAZ节点是由Crossbow公司设计开发的,通过研究发现,MICAZ与GAINZ存在很大的相同点。在文献[2]中有较详细比较了两者的异同,本文对其进行了归纳,它们的相同点包括:主要的节点结构、采用的处理器、射频收发器、flash存储器的型号和扩展接口等部件一致,两者器件的连接方式也基本一致。两者的不同之处在于处理器使用的晶振频率,GAINZ使用的是8MHz晶振,而MICAz使用的是7.3827MHz晶振。
3.1 TinyOS体系结构
Tinyos的应用运行环境主要由5个部分实现:Main组件用于节点硬件的初始化以及调度程序的开始执行;应用组件由具体的应用定义,用于实现用户需求的具体应用的功能;系统组件用于为应用层组件提供各种服务;HPL(硬件描述层)是底层硬件的包装,对硬件平台有较高依赖性,该层组件即使起到硬件包装、管理硬件起到隔离应用层与硬件的作用,硬件描述层的独立抽象增强了TinyOS的移植性。通过硬件抽象层对硬件平台的合理描述,可使操作系统内核基本和具体的硬件无关,从而实现不同平台间的移植;节点硬件是操作系统与其应用程序运行的硬件平台上的硬件设施。
3.2 nesC语言
nesC(C language for network embedded systems)是加州大学伯克利分校在C语言的基础上进行的一定的扩展,目的是为了能更好的支持TinyOS的组件化编程模式,以方便有效地支持面向传感器网络的应用和操作系统的开发。TinyOS以及基于TinyOS的应用都是nesC编写的。nesC主要的特点包括:支持基于组件的编程模式,并兼容标准的C语言语法;将组件化/模块化思想和TinyOS基于事件驱动的执行模型结合起来以利于WSN协议的开发;编译器支持实现参数化接口,利于用户程序的开发;组件化编程思想,提高代码的可重用度,极大节省了代码空间。
nesC语言中,应用程序都是由组件和接口组成:⑴.组件 :nesC组件使用的是一个纯局部的命名空间,这就是说一个组件除了要声明它将执行的函数外, 还要声明它所调用的函数。每一个组件都有一个形式说明(specification),这个形式说明是一段代码,它声明了组件所提供(执行)接口(函数) 和所使用(调用)的接口(函数)。nesC有两种组件:配件(configurations),用于将组件连接在一起从而形成一个新的组件;模块(modules),提供了接口代码的实现,并且分配组件内部状态,是组件内部行为的具体实现。配件和模块的主要区别是后者有实现代码但不能连接。前者没有代码,但可以连接⑵.接口:接口(interface)是相关函数的一个集合,用户可以根据功能的需要定义自己的接口,但在定义接口中的函数时,必须使用command或 event关键字声明该函数是命令或是事件,否则编译时会报错。
4、TinyOS在GAINZ上的移植
TinyOS已包含对Atmega128L处理器的支持,我们也通过对比GAINZ节点与MICAZ节点,发现两者的不同之处在于处理器使用的晶振频率,这意味这在编程设置处理器串行接口的波特率时有所不同。因此只需通过修改TinyOS中波特率寄存器UBRR的值即可在TinyOS中使用“make micaz”来编译应用程序,使其在GAINZ节点上正确运行,大大简化了在GAINZ上实现TinyOS移植的工作。但是GAINZ上移植TinyOS1.x与移植TinyOS2.x略有不同,在TinyOS2.x中,并不需要对GAINZ进行硬件描述层的编写,就能使用“make micaz”来编译应用程序;并且不需要再定制编译环境,TinyOS2.x系统自身便能生成ihex格式的二进制代码。这样在TinyOS中应用程序编译之后就可以生成ihex格式的二进制代码,并可通过GAINZ开发包中的AVR程序烧写器进传感器节点中。移植的整体步骤如下:①安装、配置TinyOS2.x环境;②编写移植代码:使用nesC语言编写自定义应用组件message;③进行移植测试:首先使用“make micaz”编译是否通过;其次使用“make micaz sim”进行仿真;最后使用“python *.py”命令显示仿真结果。④移植到GAINZ节点上:将应用组件编译通过后,将会自动生成的main.ihex文件,我们将其改成main.hex,烧录到GAINZ节点上。 5、测试
安装配置好环境以后,在windows下运行cygwin,输入命令“tos-check-env ”测试安装环境;对Blink例子和应用组件message仿真,显示仿真结果:Blink是利用dbg语句在内核上使定时器0、定时器1、定时器2按不同频率显示仿真时间;应用组件message是节点间的通信,所以仿真时只会显示发送节点发送成功时的消息即“successfully sending”。使用Graphviz产生可视化的图(组件间的关系),并通过使用“make micaz docs”在/opt/tinyos-2.x/doc/nesdoc目录下面的micaz文件夹中生成index.html。通过在网页左边的导航栏中点击components栏中的BlinkAppC、messageAppC,可以看见nesdoc,将生成的main.ihex文件烧录到GAINZ节点里,如果GAINZ节点上烧录的是Blink测试程序,则节点上的Led灯(红、绿、黄灯)以不同的频率闪烁;如果GAINZ节点上烧录了自己编的应用组件程序message,则GAINZ节点上发送节点红灯先亮,接收节点绿灯后亮。
6、结论
本文利用研究者已实现在不同平台上移植TinyOS的经验,以在GAINZ上实现移植为目标,编写了应用组件message,并对它和TinyOS下的测试实例进行了仿真测试和烧录到GAINZ节点测试。所得仿真结果为:Blink是利用dbg语句在内核上使定时器0、定时器1、定时器2按不同频率显示仿真时间;应用组件message是节点间的通信,所以仿真时只会显示发送节点发送成功时的消息即“successfully sending”。烧录到GAINZ节点测试结果为:Blink测试程序使得节点上的Led灯(红、绿、黄灯)以不同的频率闪烁;自己编的应用组件程序message使得发送节点红灯先亮,接收节点绿灯后亮。试结果表明,在GAINZ上移植TinyOS是可行的。
参考文献
[1] 宁波中科集成电路设计中心(计算所宁波分部),中国科学院计算技术研究所信息网络室.GAINZ节点产品白皮书.2005.12.
[2] 唐彤兰.无线传感器网络节点自定位技术与无线传感器网络开发平台研究[D].浙江杭州:浙江大学 信息与通信工程,2007.
[关键词]无线传感器网络(WSN);TinyOS移植;nesC;GAINZ
中图分类号:TP212 文献标识码:A 文章编号:1009-914X(2014)33-0144-01
1、引言
无线传感器网络(Wireless Sensor Network, WSN)是当前在国际上备受关注的前沿热点研究领域。目前,国内许多学者已经证明了TinyOS的可移植性,也实现了TinyOS在不同芯片(如51单片机、PIC微处理器、无线单片机CC1010、CC2430、嵌入式开发板GENE-8310、LCP2136FBD64等等)上的移植,并提出了很多改进方法,如采用基于FIFO的动态优先级调度策略、引入抢占式任务调度策略等在任务调度策略上的一些改进。针对不同的应用,对TinyOS系统的要求也不一样,这就需要我们对TinyOS的组件进行相应的重建或修改。对不同平台上移植TinyOS,并让其正确运行,达到与平台良好的融合是目前TinyOS移植的最终目标。由于我们选择的开发平台是中科院研发的GAINZ节点平台,而TinyOS系统并未加入对GAINZ节点的底层支持,本文针对GAINZ自身的特点,分析了TinyOS的移植性,并比较GAINZ节点和MICAZ节点的异同,修改组件和编写应用组件实现了TinyOS的移植。个可行的研究平台。
2、GAINZ节点
GAINZ节点是由中科院计算所研发的无线传感器网络节点平台,它兼容2.4G无线传感器网络节点,在传输距离、功耗等方面具有一定的优势。GAINZ采用低功耗微处理器芯片ATMEGL128,射频部分采用的是CHIPCON CC2420芯片,扩展存储采用容量达512KB的低功耗FLASH存储器。整个系统采用了通用的接口插槽,将传感、处理和通信模块进行分离,可以实现按照不同的应用需求进行不同的扩展[1]。
TinyOS支持的硬件平台中有MICAZ,MICAZ节点是由Crossbow公司设计开发的,通过研究发现,MICAZ与GAINZ存在很大的相同点。在文献[2]中有较详细比较了两者的异同,本文对其进行了归纳,它们的相同点包括:主要的节点结构、采用的处理器、射频收发器、flash存储器的型号和扩展接口等部件一致,两者器件的连接方式也基本一致。两者的不同之处在于处理器使用的晶振频率,GAINZ使用的是8MHz晶振,而MICAz使用的是7.3827MHz晶振。
3.1 TinyOS体系结构
Tinyos的应用运行环境主要由5个部分实现:Main组件用于节点硬件的初始化以及调度程序的开始执行;应用组件由具体的应用定义,用于实现用户需求的具体应用的功能;系统组件用于为应用层组件提供各种服务;HPL(硬件描述层)是底层硬件的包装,对硬件平台有较高依赖性,该层组件即使起到硬件包装、管理硬件起到隔离应用层与硬件的作用,硬件描述层的独立抽象增强了TinyOS的移植性。通过硬件抽象层对硬件平台的合理描述,可使操作系统内核基本和具体的硬件无关,从而实现不同平台间的移植;节点硬件是操作系统与其应用程序运行的硬件平台上的硬件设施。
3.2 nesC语言
nesC(C language for network embedded systems)是加州大学伯克利分校在C语言的基础上进行的一定的扩展,目的是为了能更好的支持TinyOS的组件化编程模式,以方便有效地支持面向传感器网络的应用和操作系统的开发。TinyOS以及基于TinyOS的应用都是nesC编写的。nesC主要的特点包括:支持基于组件的编程模式,并兼容标准的C语言语法;将组件化/模块化思想和TinyOS基于事件驱动的执行模型结合起来以利于WSN协议的开发;编译器支持实现参数化接口,利于用户程序的开发;组件化编程思想,提高代码的可重用度,极大节省了代码空间。
nesC语言中,应用程序都是由组件和接口组成:⑴.组件 :nesC组件使用的是一个纯局部的命名空间,这就是说一个组件除了要声明它将执行的函数外, 还要声明它所调用的函数。每一个组件都有一个形式说明(specification),这个形式说明是一段代码,它声明了组件所提供(执行)接口(函数) 和所使用(调用)的接口(函数)。nesC有两种组件:配件(configurations),用于将组件连接在一起从而形成一个新的组件;模块(modules),提供了接口代码的实现,并且分配组件内部状态,是组件内部行为的具体实现。配件和模块的主要区别是后者有实现代码但不能连接。前者没有代码,但可以连接⑵.接口:接口(interface)是相关函数的一个集合,用户可以根据功能的需要定义自己的接口,但在定义接口中的函数时,必须使用command或 event关键字声明该函数是命令或是事件,否则编译时会报错。
4、TinyOS在GAINZ上的移植
TinyOS已包含对Atmega128L处理器的支持,我们也通过对比GAINZ节点与MICAZ节点,发现两者的不同之处在于处理器使用的晶振频率,这意味这在编程设置处理器串行接口的波特率时有所不同。因此只需通过修改TinyOS中波特率寄存器UBRR的值即可在TinyOS中使用“make micaz”来编译应用程序,使其在GAINZ节点上正确运行,大大简化了在GAINZ上实现TinyOS移植的工作。但是GAINZ上移植TinyOS1.x与移植TinyOS2.x略有不同,在TinyOS2.x中,并不需要对GAINZ进行硬件描述层的编写,就能使用“make micaz”来编译应用程序;并且不需要再定制编译环境,TinyOS2.x系统自身便能生成ihex格式的二进制代码。这样在TinyOS中应用程序编译之后就可以生成ihex格式的二进制代码,并可通过GAINZ开发包中的AVR程序烧写器进传感器节点中。移植的整体步骤如下:①安装、配置TinyOS2.x环境;②编写移植代码:使用nesC语言编写自定义应用组件message;③进行移植测试:首先使用“make micaz”编译是否通过;其次使用“make micaz sim”进行仿真;最后使用“python *.py”命令显示仿真结果。④移植到GAINZ节点上:将应用组件编译通过后,将会自动生成的main.ihex文件,我们将其改成main.hex,烧录到GAINZ节点上。 5、测试
安装配置好环境以后,在windows下运行cygwin,输入命令“tos-check-env ”测试安装环境;对Blink例子和应用组件message仿真,显示仿真结果:Blink是利用dbg语句在内核上使定时器0、定时器1、定时器2按不同频率显示仿真时间;应用组件message是节点间的通信,所以仿真时只会显示发送节点发送成功时的消息即“successfully sending”。使用Graphviz产生可视化的图(组件间的关系),并通过使用“make micaz docs”在/opt/tinyos-2.x/doc/nesdoc目录下面的micaz文件夹中生成index.html。通过在网页左边的导航栏中点击components栏中的BlinkAppC、messageAppC,可以看见nesdoc,将生成的main.ihex文件烧录到GAINZ节点里,如果GAINZ节点上烧录的是Blink测试程序,则节点上的Led灯(红、绿、黄灯)以不同的频率闪烁;如果GAINZ节点上烧录了自己编的应用组件程序message,则GAINZ节点上发送节点红灯先亮,接收节点绿灯后亮。
6、结论
本文利用研究者已实现在不同平台上移植TinyOS的经验,以在GAINZ上实现移植为目标,编写了应用组件message,并对它和TinyOS下的测试实例进行了仿真测试和烧录到GAINZ节点测试。所得仿真结果为:Blink是利用dbg语句在内核上使定时器0、定时器1、定时器2按不同频率显示仿真时间;应用组件message是节点间的通信,所以仿真时只会显示发送节点发送成功时的消息即“successfully sending”。烧录到GAINZ节点测试结果为:Blink测试程序使得节点上的Led灯(红、绿、黄灯)以不同的频率闪烁;自己编的应用组件程序message使得发送节点红灯先亮,接收节点绿灯后亮。试结果表明,在GAINZ上移植TinyOS是可行的。
参考文献
[1] 宁波中科集成电路设计中心(计算所宁波分部),中国科学院计算技术研究所信息网络室.GAINZ节点产品白皮书.2005.12.
[2] 唐彤兰.无线传感器网络节点自定位技术与无线传感器网络开发平台研究[D].浙江杭州:浙江大学 信息与通信工程,2007.