针对传感器节点的硬件特点,加州大学伯克利分校的研究人员设计了TinyOS操作系统,能够满足传感器节点的工作需求。它基于组件编程,通过各个组件之间的配置连接,能够实现各种功能。TinyOS的程序采用的是模块化设计,因此具体实现部分的程序所占的存储就少了,从而弥补了存储空间的不足。TinyOS包含了经过特殊设计的组件模块,可以通过简单的编程获取和处理感应的数据并利用无线电来传输数据。
TinyOS最大的特点就是基于事件驱动机制,通过硬件中断来触发下一个事件,再结合各组件之间的连接,从开始一直执行到结束,完成要实现的功能。
3.1.2 TinyOS组件模型
TinyOS的组件模型使其实现了高效率的模块化和易于构造组件型应用软件。组件有四个相互关联的部分:一组命令处理程序句柄,一组事件处理程序句柄,一个经过封装的私有数据帧,一组简单的任务。每个组件还声明了自己使用的接口及其要用信号通知的时间,这些声明将用于组件的相互连接。如图3-1所示的例子中:
图3-1 支持通信的传感器应用程序的组件结构
TinyOS中的组件通常分为三类:硬件抽象组件、合成组件和高层次的软件组件。在上述例子中,应用程序为最高软件组件,按照上面的结构,一级一级向下调用。在每一级的组件分别定义其实现,将其接口连接后,便能实现通信功能。
3.1.3 TinyOS通信模型
无线传感器网络中采用的是主动消息模型AM(Active Message),它是面向消息通信的一种通信模式,它基于地址,并且支持信息确认和分发。在这种方式中,每个消息都文护一个应用层的处理器。当目标节点收到这个消息时,就会把消息中的数据作为参数,交给应用层的处理器进行处理,一般是解包数据、计算处理或发送响应消息等。[1]
主动消息是一种异步通信机制,其基本原理是:消息头部的控制信息,是用户层的指令序列的地址,指令序列会从网络中取出消息数据,并将消息合并到此后的计算中去。每个消息在它的头部包含一个用户层的处理程序地址,当消息到达的时候,就会执行这个程序,消息体就作为一个参数。[ ]
如果将主动消息通信实现为一个组件,就可以忽略下层通信硬件的具体配置,不论下层的硬件是如何运作的,数据均可以直接用于各种应用。
3.2 nesC语言
nesC语言是由C语言扩展而来的,意在把组件化/模块化的思想和TinyOS基于事件驱动的执行模型结合起来,它能够有效支持面向传感器网络的新型操作系统。在nesC语言中,定义了两种不同功能的组件:配件(configuration)和模块(module)。配件描述了不同组件接口直接的关系,而模块则描述了组件提供的接口中的函数功能的实现过程。
nesC的接口具有双向性,它们描述一个多功能的两组件(供给者和使用者)之间的交互渠道。接口叙述一组叫做指令(command)的,被接口的供给者实现的,和一组叫做事件(event)的,被接口的使用者实现的。在每个组件中的实现模块中,首先在其配置文件中定义了各个组件的接口相互连接的情况,然后在module中通过调用该组件的command函数实现功能的初始化,其次通过调用其他组件提供的event函数实现各个接口要实现的具体功能,由于各个同名接口在configuration组件中已经连接起来,故该组件接口功能的实现由其连接的其他组件的接口完成,通过一系列的先后调用,最终实现了该组件的功能。
3.3 本章小结
本章介绍了专门应用于无线传感器网络的嵌入式操作系统TinyOS及其编程语言nesC语言。介绍了TinyOS操作系统基于事件驱动的特点,以及其特有的组件模型,简要描述了nesC语言中如何实现与组件的对应。 LabVIEW传感网动态信号监控软件开发+文献综述(5):http://www.youerw.com/tongxin/lunwen_3658.html