2013西邮毕设毕业论文 - 图文

发布时间 : 星期四 文章2013西邮毕设毕业论文 - 图文更新完毕开始阅读

基于CC2430无线信道选择的软件设计

3 程序开发环境

3.1 TinyOS概述

3.1.1 TinyOS的定义

TinyOS是一个开源的嵌入式操作系统,它是由加州大学的伯利克分校开发出来的,主要应用于无线传感器网络方面,其作为一系列合作项目的结果。它是基于一种组件(Component-Based)的架构方式使得快速的更新成为可能,而这又减小了受传感网络存储器限制的代码长度,能够快速实现各种应用。它的首先出现是做为UC Berkeley和Intel Research合作实验室的杰作,用来嵌入智能微尘当中,之后慢慢演变成一个国际合作项目,即TinyOS联盟。

TinyOS的程序采用的是模块化设计,所以它的程序核心往往都很小(一般来说核心代码和数据大概在400 Bytes左右),能够突破传感器存储资源少的限制,这能够让TinyOS很有效的运行在无线传感器网络上并去执行相应的管理工作等。

TinyOS程序由基于组件的软件工程software component建构,它们中一些表现了硬件的抽象概念, 组件用接口互相连接。TinyOS为普通的抽象描述提供了接口和组件,例如数据包通信,路由,感知,行为和储存。

TinyOS 2.x版本后完全的non-blocking:它配备了一个单独的堆栈。因此所有的持续超过几百微秒I/O操作都以异步进行并且带有回叫功能。为了使本地的编译器更加出色地优化交叉调用边界,TinyOS用nesC的特性去连接这些回叫,叫作事件。non-blocking系统可以让TinyOS在单一存储器下保持高度的协同性。它强迫程序用stitching together many small event handlers的方法编写复合逻辑。为了支持更高的计算量,TinyOS提供了任务,其比Deferred Procedure Call and interrupt handler bottom halves小。

一个TinyOS组建可以发布一个任务,操作系统可以把它排入列表以待之后执行。任务是没有优先权的并且按照FIFO运行。 这个简单的协同模型是典型的满足了以I/O为中心的应用,但这样的模型对于CPU负荷重的应用程序来说不是太好的,因为它会导致向OS多次提出线程间协同处理的请求。

TinyOS代码与程序代码进行静态连接,然后用GNU toolchain编译到一个小的二进制系统中。它的联盟为TinyOS的应用,提供完整的开发平台。

TinyOS的构件包括网络协议、分布式服务器、传感器驱动及数据识别工具。其良好的电源管理源于事件驱动执行模型,该模型也允许时序安排具有灵活性。TinyOS已被应用于多个平台和tinyos感应板中。TinyOS操作系统、库和程序服

15

基于CC2430无线信道选择的软件设计

务程序是用nesC写的。 3.1.2 TinyOS的特点

TinyOS提供一系列可重用的组件,一个应用程序可以通过连接配置文件(A Wiring Specification)将各种组件连接起来,以完成它所需要的功能。

TinyOS的应用程序都是基于事件驱动模式的,采用事件触发去唤醒传感器工作。

tasks一般用在对于时间要求不是很高的应用中,且tasks之间是平等的,即在执行时是按顺序先后来得,而不能互相占先执行,一般为了减少tasks的运行时间,要求每一个task都很短小,能够使系统的负担较轻。

events一般用在对于时间的要求很严格的应用中,而且它可以占先优于tasks和其他events执行,它可以被一个操作的完成或是来自外部环境的事件触发,在TinyOS中一般由硬件中断处理来驱动事件。

在TinyOS中由于tasks 之间不能互相占先执行,所以TinyOS没有提供任何阻塞操作,为了让一个耗时较长的操作尽快完成,一般来说都是将对这个操作的需求和这个操作的完成分开来实现,以便获得较高的执行效率。

3.2 nesC的基本概念

3.2.1 nesC简介

nesc是一种扩展C的编程语言,主要用于传感器网络的编程开发,加州大学伯克利分校研发人员为这个平台开发出微型操作系统TinyOS和编程语言nesC,同时国内外很多大学和机构利用这一平台进行相关问题的研究。nesc主要用在Tinyos中,tinyos也是由nesc编写完成的。TinyOS操作系统就是为用户提供一个良好的用户接口。基于以上分析,研发人员在无线传感器节点处理能力和存储能力有限情况下设计一种新型的嵌入式系统TinyOS,具有更强的网络处理和资源收集能力,满足无线传感器网络的要求。为满足无线传感器网络的要求,研究人员在TinyOS中引入4种技术:轻线程、主动消息、事件驱动和组件化编程。轻线程主要是针对节点并发操作可能比较频繁,且线程比较短,传统的进程/线程调度无法满足(使用传统调度算法会产生大量能量用在无效的进程互换过程中)的问题提出的。 3.2.2 nesC语法结构

在nesC语言中结构和内容的分离的,程序由组件构成, 它们装配在一起构成完整程序。根据接口的设置说明组件功能。接口可以由组件提供或使用。被提

16

基于CC2430无线信道选择的软件设计

供的接口表现它为使用者提供的功能,被使用的接口表现使用者完成它的作业所需要的功能。

NesC语言结构如下3-1: 接口 .nc文件 组件 Conponents 模块组件 Module 配置组件 Configuration Interface 图3-1 NesC语言结构

模块组件是接口的实现者和使用者。模块组件包含两部分内容:模块组件使

用和提供的接口描述和模块组件内部的实现代码。模块组件名也必须与文件名同名。

配置组件是一个完整的配置列表,配置组件可以像模块组件一样使用外部的接口并且对外提供接口。配置组件与模块组件一样包含两部分内容:配置使用和提供的接口描述和配置内部的实现代码(配置列表)。配置组件名也必须与文件名同名。

接口放在一个单独的文件中*.nc。接口的名称应与文件名对应,例如interface1的接口则必须对应于文件名interface1.nc。有关接口的语法有:

provides interface A1; /* 提供接口 */ uses interface A1; /* 使用接口 */ provides interface A1 as A2; /* 接口别名 */ uses interface A1 as A2;

接口的作用是声明命令(command),而模块组件的作用是实现命令(command)。

命令是接口中的一种函数,这种函数要求接口的提供者实现,而接口的使用者则会调用这种函数。形象的称为command,即为接口提供的可供调用的命令。接口语法结构类C语言,只是在最前面增加command关键字。

事件也是接口中的一种函数,这种函数要求接口的提供者调用,而接口的使

17

基于CC2430无线信道选择的软件设计

用者则会实现这种函数。形象的称为event,即为接口使用者所实现的事件处理函数。语法结构类C语言,只是在最前面增加event关键字。

任务(task)是TinyOS系统提供的一种特殊的机制,类同于线程。task一般为一个函数,无参数,无返回值。task可以在一般的TinyOS程序中发出,而task的执行是由TinyOS系统内核来实现的。并且task的执行是不影响调用者的,将会在发出task后的某一个时刻被调度运行。

18

联系合同范文客服:xxxxx#qq.com(#替换为@)