当前位置:首页 >> 信息与通信 >>

无线传感器网络节点嵌入式操作系统的研究与应用_图文

电子科技大学 硕士学位论文 无线传感器网络节点嵌入式操作系统的研究与应用 姓名:赵建华 申请学位级别:硕士 专业:软件工程 指导教师:汪文勇 20070603

摘要

微机电系统(MEMS,Micro-Ele,ctro.Mechanism System)、片上系统(soc,System
On

Chip)和无线通信技术的进步孕育了无线传感器网络(WSN-Wireless

Sensor

Network)。它能够实时监测、感知、采集和处理各种监测对象的信息,具有十分 广阔的应用前景,是当前国际上备受关注的、多学科高度交叉的新兴前沿研究热 点之一。无线传感器网络节点的硬件能力是非常有限的,节点上的嵌入式操作系 统必须满足在有限的物理空间内实现对硬件的高效管理,因此适用于无线传感器 网络节点的微型嵌入式操作系统就成为关注的热点。 无线传感器网络设计的趋势是针对特定的应用而并不是普遍的应用,不同的 应用所需要的硬件平台是不相同的。随着无线传感器网络的广泛应用,节点构成 的变化是巨大的,无线传感器网络节点上的嵌入式操作系统必须具备好的移植性, 因此对其移植性研究具有重要的意义。 本文以无线网络传感器设计要求为依据,在软件设计方面进行深入的研究, 提出满足无线传感器网络操作系统的几点要求。重点研究无线传感器网络中经典 的嵌入式操作系统TinyOS,包括组件模型、通信模型、能量管理机制、事件驱动 机制、调度策略。同时对TinyOS操作系统的编程语言nesC进行了分析和说明, 对其编译过程进行了详细的研究和分析,着重分析了nesC自带编译器ncc的工作 过程,最后完成了nesC语言编译器到基于80C51指令芯片上的移植。 在深入研究基于组件架构的TinyOS的基础上,设计了将T'myOS应用到其它 微控制器的移植方案,提出了硬件描述层组件的设计基本原则,实现了T'myOS在 基于80C51指令芯片上的移植。 同时对TiayOS调度机制存在的问题进行讨论,提出了几种改进策略,并通过 一种策略进行实验验证。

关键词;无线传感器网络,TinyOS,ncsC,80C51,移植

Abstract

Sensor

network,

which

is

made

by

the

convergence


of

sensor,

micro—electro—mechanism system and networks technologi韶,is
about acquiring and processing information.It has become research.The capability of the hardware is
SO one

novel technology

of the front fields to

limited that the embedded operating


system

has to realize

efficient management

of the hardware in

limited space.As
sensor



result,choosing appropriate operating system for the nodes of wireless become very important. Networked
purpose,and
sensor

networks

devices will

tend to

be application specific,rather than

general
for the

carry only


the available hardware support actually

needed

application,As there is

wide range ofpotentiM applications,the variation in physical


devices is likely to be large.Good porting is

key

element for the operating

system of

the nodes of wireless
our

SenSOr

networks.So

WSNOS porting

become very important ia

study.

According

to the

design

requirement

of wireless

sensor networks,this paper

has

adeep

research in the

area

of the software design.Summarizing the existing
at

embedded

operating systems by classification,tracking the progress concentrating at the typical of component

domestic and foreign,

embedded

operating system TinyOS,including the models of

and communication,the mechanics

power

management,event driven
language nesC of
ncc

mechanics,schedule strategy.At the same time,the programming
TinyOS TinyOS

and

its

compilation

pross are

studied particularly.And

the porting of

from

to 80C51
on

family microprocessors chip is carded ouL

Based

the profound research of TinyOS,the porting

schema

and the

design

principleofthelayerofhardwaredescriptionareputforward.ThepottingfromTinyOS to 80C51 family microprocessors chip is carried out.
In order to improve the availability of TinyOS,the dispatch strategy ofTinyOS are pointed out.One

improvement
is

direction of the

strategy

tested and verified.

Key

words:WSN,TinyOS,nesC,80C51,porting


独创性声明
本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地

方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含
为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。

签名:

魄≥。严石月严日

关于论文使用授权的说明
本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或
扫描等复制手段保存、汇编学位论文。

(保密的学位论文在解密后应遵守此规定)

签名:

鹳■



一4,

第一章引言

第一章引言

1.1论文的研究背景与意义
随着通信技术、嵌入式计算技术、分布式信息处理技术和传感器技术的飞速 发展和日益成熟,以及计算机运算速度的突飞猛进,数据处理和计算能力的迅速 提高,融合了21世纪信息产业三大支柱(传感器技术、信息处理技术和网络通信技 术)的无线传感器网络(WSN—wirele豁Sensor Network)应运而生阱】。 无线传感器网络(WSN—Wireless
Sensor

Network)就是由部署在监测区域内大

量的廉价微型传感器节点组成,通过无线通信方式形成的一个多跳的自组织的网 络,其目的是协作地感知、采集和处理网络覆盖区域中感知对象的信息,并发送 给观察者。 无线传感器网络是当前国际上备受关注的、由多学科高度交叉的新兴前沿研

究热点领域,被认为是21世纪最重要的技术之一旧。它将会对人类未来的生活方 式产生巨大影响,在麻省理工学院的“技术评论>>杂志(Technology Review)评出的
对人类未来生活产生深远影响的十大新兴技术中,无线传感器网络位居榜首。无 线传感器网络能够通过各类集成化的微型传感器协作地实时监测、感知和采集各 种环境或监测对象的信息,通过嵌入式系统对信息进行处理,并通过随机自组织 无线通信网络以多跳中继的方式将所感知的信息传送到用户终端,从而真正实现
“无处不在的计算(Ubiquitous Computing)”理念。无线传感器网络不仅能满足人们

从信息的传递及检索到信息获取的新需求,而且将在很大程度上满足未来无线通 信的需求,未来无线通信的主体将是人一机通信和物一物通信。 当前,对WSN的研究主要集中在通信协议上,约占研究点的35%:其次是能 耗管理,约占16%;再次是定位算法、体系结构设计和可靠性研究,三者共占研究 点的24%,而对于系统软件尤其是操作系统的研究相对较少。然而,WSN的操作系 统(WSNOS)是WSN系统的基本软件环境,是众多WSN应用软件开发的基础,它 的高效性、灵活性和实时性直接影响到系统的性能a所以针对无线传感器网络节 点操作系统的研究与应用具有非常宽广的空间。本文主要对其典型的嵌入式操作 系统进行研究,重点对其进行应用与改进。

电子科技大学硕士学位论文

1.2国内外研究现状
从无线传感器网络当前的研究成果来看,世界范围内关于其的研究尚处于起 步阶段,尽管有少数投入使用的商业产品,但是距离实际需求还相差甚远。 国内方面,关于无线传感器网络的研究才一刚刚开始,主要是由一些高等院 校和研究机构牵头来研究的,目前浙江大学成立了一个无线传感器网络试验小组 专门从事无线传感器网络硬件实现方面的研究;电子科技大学、东南大学,西北工 业大学最近也在从事无线传感器网络路由协议等方面的研究:另外还有一些研究所 诸如中科院计算所、中科院自动化研究所等也开始从事无线传感器网络技术的研 究,北京邮电大学也参与了无线传感器网络的研究。尽管国内的已经开始这方面 的研究,但由于起步较晚,目前基本上还处于起步阶段,尚无重大成果出现,从 中国专利网当前公开发布的专利可窥一斑。 国外在这方面的研究开始的比较早,美国很早就开始了无线传感器网络在军 事领域的研究。除了英特尔(Intel),Crossbow,Freescale,Ember等公司参与外,另外 还有一些大学和研究机构如麻省理工大学、加州大学伯克利分校、加州大学洛杉 矶分校、哈佛大学、康奈尔大学等的一批博士生和教授也在从事无线传感器网络 关键技术的研究。欧洲的一些公司Philips,Siemens,Ericsson,Chipcon等都开始了 对无线传感器网络的研究。日本的总务省在2004年3月成立了“泛在无线传感器 网络”调查研究会,主要对无线传感器网络研究开发、标准化、社会的认知性、 推进政策等进行探讨。NEC,OKI等公司也推出了相关产品并进行了一些应用试验。 从国外目前的研究情况来看,关于无线传感器网络方面的研究大致可划分为 两个阶段:第一个阶段主要偏重于利用MEMS技术设计小型化的节点设备,代表性 的研究项目是智能微尘(Smart Dust);第二个阶段主要是对网络技术和通信协议的 关注和研究以及相应仿真平台和实现平台的研究。目前伯克利大学己经研究出了 实现平台TinyOS,但是仿真平台还未统一。对于网络技术的研究从发表的文章看 关于路由协议研究的比较多,其次是MAC(Medium
QoS(Quality
of Access

Contr01)协议:关于

Service)以及时间同步以及定位算法等的研究并未引起研究者的注

意,虽然目前也有一些成果,但相对来说还不是很多。 总的来说,对无线传感器网络的研究还处于起步阶段,还有大量的问题有待 我们去解决,未来的研究工作可以说是任重而道远。



第一章引言

1.3课题背景,内容及意义
本课题主要是以电子科技大学软件工程研究中心项目“基于IPV6无线传感器 网络节点’,(国家发改委下一代互联网示范性工程项目)为基础,该项目主要是设计 并开发一种支持IPV6的无线传感器网络节点。我主要参与节点软件相关部分的研 究开发工作,论文的主要部分也是围绕着节点软件部分展开,是对我在工作中的 一个总结。 论文文以无线传感器网络设计要求为依据,在软件设计方面进行深入的研究。 文章在分析无线传感器网络和其节点的基础上,主要分析了无线传感器网络节点 操作系统TinyOS的组件模型、通信模型、能量管理制、事件驱动机制、调度策略 和编程语言等方面;接着重点分析nesC语言的编译过程,完成nesC语言和TinyOS 的移植;同时完成了TinyOS调度机制的一些改进。主要工作如下: (1)对nesC语言编译过程进行详细分析,提炼出其编译步骤,特别对rlc,g预编 译过程进行详细分析,同时完成ncsC语言编译器的移植。 (2)对TinyOS进行分析,提出一套TinyOS的移植到新平台的方案,完成TinyOS 在基于80C51指令单片机上的移植,对将T'myOS移植到其他平台有很好的参考意 义。
? ,

(3)针对TinyOS的调度算法存在的问题,提出几种调度算法,提出了基于优先 级调度的调度算法,使之能适用于任务提交比较频繁和低优先级任务运行时间比 较长的情况,大大提高了工作效率。 由于无线传感器网络支持的平台多样化,其节点操作系统多样化,因此研究 操作系统的移植具有重要意思;TinyOS调度自身存在很多问题,采用新的调度策 略对其改进也具有重要意义。

1.4论文结构
本论文的工作是围绕着无线传感器网络节点嵌入式操作系统这一崭新的课题 进行的,论文组织如下: 第一章主要介绍研究背景和研究意义;作者从事的研究工作以及研究内容, 论文的结构。 第二章论述无线传感器网络网络体系结构,依据无线传感器网络的基本特点 和主要性能,介绍无线传感器网络操作系统的特点和几种常见的操作系统。


电子科技大学硕士学位论文

第三章以无线传感器网络的特征以及节点操作系统的需求为依据分析研究了 无线传感器网络中经典的操作系统TinyOS的组件模型、通信模型、能量管理制、 事件驱动机制、调度策略和编程语言。 第四章重点分析了TinyOS的编程语言nest的编译过程,尤其对其预处理过 程进行了详细的分析,通过实验验证总结提出了一个非常详细的编译链接过程, 最后提出一套nesC语言的移植方案,并进行实现。


第五章在对TinyOS进行深入的研究的基础上,对TinyOS的一些应用和改进。 提出了TinyOS的移植方案、硬件描述层组件的设计原则。实现了TinyOS在基于 80C51指令芯片上的移植,包括Timer模块、电源管理模块、UART模块。同时对 其调度机制存在的问题进行分析,采用新的调度策略对其进行改进。 第六章总结全文,展望未来的研究工作。



第二章无线传感器网络节点及操作系统简介

第二章无线传感器网络节点及操作系统简介

2.1无线传感器网络体系结构 2.1.1无线传感器网络整体结构
在所设计的网络体系结构中,无线传感器网络节点以自组织形式构成多跳中 继的分级结构网络(如图2-1所示)。网络体系结构方案中包括普通节点、sink节 点、网关节点和监控中心。普通和sink节点完成数据的采集和多跳中继传输;网 关节点完成无线和有线信号转换,实现CERNET2的接入;监控中心完成区域数据 的综合处理。
监视区域

图2.1无线传感器网络体系结构 节点按照以下过程进行组网:’ 第一步,在传感器网络中,节点任意散落在被监测区域内,这一过程是通过 飞行器撒播、人工埋置和火箭弹射等方式完成的。 第二步,撒放后的传感器节点进入到自检启动的唤醒状态,每个传感器节点会 发出信号,收集并记录周围传感器节点的工作情况,采用洪泛方式建立拓扑。

第三步,这些传感器节点会根据监控到的周围传感器节点的情况,以节点自组
织的形式构成支持动态拓扑的多跳中继分级结构网络。在这样的网络中,具有某 种关联的网络节点组成簇(cluster),在簇内,通常有一个按一定规则选举产生sink

电子科技大学硕士学位论文

节点。普通节点通过多跳中继方式将监测数据传到sink节点,最终借助长距离或临 时建立的sink链路将整个区域内的数据传送到远程中心进行集中处理。为了适应 由于sink节点死亡或者由于sink节点选举不合理造成的通信失败,要通过重新选 举sink节点来适应网络拓扑结构的变化。 第四步,组成网络的传感器节点根据一定的路由算法选择合适的路径进行数 据通信,将数据送到网关节点G和监控中心CC中进行处理。 传感器节点通常是一个微型的嵌入式系统,它的处理能力、存储能力和通信

能力相对较弱,通过携带能量有限的电池供电跚。从网络功能上看,每个传感器
节点兼顾传统网络节点的终端和路由器双重功能,除了进行本地信息收集和数据 处理外,还要对其他节点转发来的数据进行存储、管理和融合等处理,同时与其 他节点协作完成一些特定任务。目前传感器节点的软硬件技术是无线传感器网络 研究的重点。Sink网关节点的处理能力、存储能力和通信能力相对比较强,它连 接无线传感器网络与Intemet等外部网络,实现两种协议栈之间的通信协议转换, 同时发布管理节点的监测任务,并把收集的数据转发到外部网络上。Sink网关节 点既可以是一个具有增强功能的传感器节点,有足够的能量供给和更多的内存与 计算资源,也可以是没有监测功能仅带有无线通信接口的特殊网关设备。

2.1.2无线传感器网络节点结构
在不同应用中,传感器网络节点的组成一般都由数据采集单元、数据处理单 元、数据存储单元、数据传输单元、嵌入式操作系统等部分组成如图2-2所示。

图2-2

无线传感器网络节点系统框架



第二章无线传感器网络节点及撵作系统简介

作为一个完整的微型计算机系统,要求其组成部分的性能必须是协调和高效 的,各个模块实现技术的选择需要根据实际的应用系统要求而进行权衡和取舍。 (1)数据处理单元 数据处理单元是无线传感器网络节点的计算核心。通常选用嵌入式CPU,负 责协调节点各部分的工作,如对数据采集单元获取的信息进行必要的处理、保存, 控制数据采集单元和电源的工作模式等。 目前使用较多的有ATMEL公司的AVR系列单片机。1’I公司的MSP430超低 功耗系列处理器,不仅功能完整、集成度高,而且根据存储容量的多少提供多种 引脚兼容的处理器,使开发者很容易根据应用对象平滑升级系统。作为2000年以 来32位嵌入式处理器市场中红极一时的嵌入式ARM处理器,也可能成为下一代 传感器节点设计的考虑对象。ARM处理器的性能跨度比较大,低端系统价格便宜, 可以代替单片机的应用,高端处理器可以达到Pcntium处理器和其他专业多媒体处 理器的水平,甚至可以在很多并行系统中实现阵列处理。ARM处理器功耗低,处 理速度快,集成度也相当高,而且地址空间非常大,可以扩展大容量的处理器。 但在普通无线传感器网络节点中使用,其价格、功耗以及外围电路的复杂度还不 十分理想。随着技术的进步,ARM处理器将在这些方面有更加出色的表现。另外, 对于需要大量内存、外存以及高数据吞吐率和处理能力的传感器网络汇聚点(也称 为基站节点1,ARM处理器是非常理想的选择。 (2)数据传输单元。 数据传输单元主要由低功耗、短距离的无线通信模块组成.通信模块消耗的能 量在无线传感器网络节点中占主要部分,所以考虑通信模块的工作模式和收发能 耗很关键。无线传感器网络节点的通信模块必须是能量可控的,并且收发收据的 功耗要非常低,对于支持低功耗待机监听模式的技术要优先考虑。目前使用较多 的有RFM公司TRl000;Chipcon公司的CCl000}i2],CC2420等。 (3)嵌入式操作系统 嵌入式操作系统为网络节点提供必要的软件支持,负责管理节点的硬件资源, 对不同应用的任务进行调度与管理。 (4)数据采集单元 。被监测物理信号的形式决定了数据采集单元的类型。网络化的传感器系统可 以减少单点测量可能造成的瞬态误差和单点环境激变可能造成的系统测量误差。 由于在一个区域内存在很多个测量点,对于单个节点的测量错误,可以通过另外 一些节点的测量结果发现,通过投票机制摒弃无效的数据,获得该区域内相对精


电子科技大学硕士学位论文

确的测量结果。 (5)电源 电源为网络节点提供正常工作所必需的能源。无线传感器网络一般都是布置 在人烟稀少或危险的区域,所以其能源不可能来自现在普通使用的工业电能,而 只能求助于自身的存储和自然界的给予。一般来说,目前使用的大部分都是自身 存储一定能量的化学电池【171。在实际的应用系统中,可以根据目标环境选择特殊 的能源供给方式,例如在沙漠这种光照比较充足的地方可以采用太阳能电池。在 地质活动频繁的地方可以通过地热资源或者震动资源来积蓄工作电能,再空旷多 风的地方可以采用风力获得能量支持。不过从体积和应用的简易性来说,化学电 池还是无线传感器网络中重点使用的能量载体。

2.2无线传感器网络及其节点 2.2.1无线传感器网络的特点和性能指标
无线传感器网络与传统的无线网络(如:WLAN和蜂窝移动电话网络)以及在组 网形式上相似的移动Ad Hoe网络(MANET)相比,它们有着明显不同的设计目标、 技术要求和应用要求。后两者注重在高度移动的环境中通过优化路由和资源管理 策略,最大化带宽的利用率,同时为用户提供一定的服务质量保证(QoS:Qualityof Servicel。而在无线传感器网络中,除了少数节点可能移动外,大部分节点都是静 止的(有的无线传感器网络可能没有移动节点)。其次,传统的无线网络和MANET 网络都是以传输数据,完成通信为目的的,中间节点仅仅负责分组数据的转发。 而无线传感器网络是以数据为中心,获取信息为目的的,中间节点不但要转发数 据,还要进行与具体应用相关的数据处理、融合和缓存。此外无线传感器网络通 常运行在恶劣甚至危险(如:野外、被污染区域或战场)的远程环境中,传感器节点 的能源(电池供电)无法补充更新;即使无线传感器网络工作在友好的环境中,对数 量巨大的传感器节点进行电池更换也是不现实的。因此设计有效的策略延长网络 的生存寿命是无线传感器网络的核心问题,能量效率的设计准则贯彻在无线传感 器网络的硬件、软件、算法和协议等各个层面。 无线传感器网络与其它网络相比,具有以下主要特点: (1)无线传感器网络没有底层基础设施,成千上万的传感器节点被抛撒或放置 在一定区域后,自动完成邻居发现和路由发现,以自组织方式构成网络。这一点

第二章无线传感器网络节点及操作系统简介

与MANET网络相似,但MANET网络的规模较小。 (2)无线传感器网络要求传感器节点小型化和微型化,使其携带的电池非常有 限,进而影响传感器节点的通信能力。为节省能量,传感器节点的邻居节点间一 般采用低功耗短距无线电通信,通信距离一般在几十米到几百米之间:非邻居节点 闾采用多跳方式通信。 (3)无线传感器网络的传感器节点数量巨大,可能存在移动节点和传感器节点 失效或增补,网络拓扑动态变化:同时又要考虑能量效率,致使MAC协议和路山 协议复杂化。 (4)无线传感器网络的目的是协作地感知、采集和处理网络所覆盖地理区域中 感知对象的信息,并传输给用户。信号的协同处理,需要无线传感器网络全局或 至少在信号协同处理区域内时间同步,有时也需要传感器节点的位置信息(如目标 定位和追踪的应用)。 (5)无线传感器网络的传感器节点角色多样性。依据网络的动态需要,传感器 节点有时会成为路由器、网关、簇头或局部信息协同处理中心。这也使得传感器 节点的协议和软件平台复杂化。 (6)无线传感器网络应用目的的多样性使得信息在网络协同处理方法(数据融 合方法)复杂化。在无线传感器网络的许多应用中,数据处理或融合与路由机制相 关联,因此无线传感器网络很难形成统一的通信协议。 无线传感器网络的性能直接影响到它的可用性,设计无线传感器网络时必须 考虑如下的性能指标: (1)能量效率和生存寿命。在无线传感器网络的设计中,不但要考虑硬件,软 件算法和通信协议等各个层次的能量效率,还要考虑网络全局的量效率和业务负 载均衡,进而延长网络的生存寿命。当无线传感器网络再也不能给用户提供准确 的感知信息时标志着网络寿命的终结。 (2)响应时间。无线传感器网络的响应时间是指用户发出请求到收到网络响应 所需的时间或传感器节点被感知对象触发到用户收到信息所需的时间。影响网络 响应时间的因素包括网络规模、无线通信信道的质量、数据协同处理算法和通信 协议等等j (3)感知精度和容错性。无线传感器网络的感知精度是指用户收到的感知信息

的精度。这个感知精度应该能包容一定的差错,如网络覆盖问题张:感器节点分布
不均匀)和个别传感器节点因通信链路问题或自身问题不提供数据或提供错误数 据。


电子科技大学硕士学位论文

(4)信息安全。无线传感器网络的安全是指网络自身应该能阻止或避免电子攻 击和电子欺骗。特别是在军事上和涉及个人隐私应用的时候,无线传感器网络必 须保证在其受到故意攻击时能够正常地工作,信息不会被窃取,所提供的信息保 持完整性。 (5)可扩展性。无线传感器网络的可扩展性主要是指网络覆盖区域的增大和传 感器节点数量的增补等可扩展能力。 (6)传感器节点应当体积小和成本低。体积小可以方便无线传感器网络的布 置,同时也不会过多地影响所要感知的物理环境。因为无线传感器网络的规模通 常都非常巨大,节点众多,低成本将有助于无线传感器网络被更广泛地应用。嘲

2.2.2无线传感器网络节点的设计目标和限制
无线传感器网络具有很强的应用相关性,在不同的应用要求下需要配套不同 的网络模型、软件系统以及硬件平台。可以说无线传感器网络是在特定的应用背 景下,以一定的网络模型规划的一组传感器节点的集合,而传感器节点是为无线 传感器网络设计的微型计算系统。 (1)微型化 无线传感器节点应该在体积上足够小,保证对目标系统本身的特性不会造成 影响。在某些场合甚至需要目标系统能够小到不容易让人察觉的程度,以完成一 些特殊任务。在软件方面,要求所有模块都应该尽量精简,没有冗余代码。对不 同的应用系统需要配套不同的软件代码。从操作系统到各种硬件设备的驱动模块, 乃至到应用程序模块都需要详细设计。这些限制都是由有限的硬件资源决定的。

(zW展性和灵活性
无线传感器网络节点需要定义统一、完整的外部接口,在需要添加新硬件部 件时可以在现有的节点上直接添加,而不需要开发新的节点。同时,节点可以按 照功能拆分成多个组件,组件之间通过标准接口自由组合。在不同的应用环境下, 选择不同的组件配置系统,这样不必为每个应用都开发一套全新的硬件系统。当 然,部件的扩展性和灵活性应该以保证系统的稳定性为前提,必须考虑连接器件 的性能。软件的扩展性体现在节点上的软件不需要额外的设备就可以自动升级, 最简单的方法就是通过无线接口直接迸行软件的下载和升级。无线信息的广播特 性可以实现多节点的同步升级,为节点软件的远程升级提供了便利的条件。软件 模块同样要做到组件化和可配置。所有的软件模块独立并且有标准的模块接口,

lO

第二章无线传感器网络节点及操作系统简介

这样不同的应用系统可以根据自身的需求配置满足要求的最小系统。 (3)稳定性和安全性 硬件的稳定性要求节点的各个部件都能够在给定的外部变化范围内正常工 作。在给定的温度、湿度、压力等外部条件下,无线传感器网络节点的处理器、 无线通信模块、电源模块要保证正常的功能,同时,传感器部件要保证工作在各 自的量程范围内。另外,节点硬件在恶劣的环境下要能稳定工作,一方面系统在 各种恶劣的气候下不会损坏,另一方面所有测量探头都能尽量接近检测环境以获 得最真实的参数信息。 节点的稳定性还需要在软件上得到保证。一方面,软件模块要保证其逻辑上 的正确性和完整性,即本身不存在缺陷:另一方面在硬件出现问题的时候能够及时 感知并采取积极的措旖,如系统重新启动或者对采集的数据进行非线性校准等。 另外,对敏感数据要以密文形式存储和传送,并要有数据完整性保护,以防止外 界因素造成的数据修改。 (4)低成本 低成本是无线传感器网络节点的基本要求。只有低成本,刁一能大量地布置 在目标区域中,表现出无线传感器网络的各种优点。低成本对传感器各个部件都 提出了苛刻的要求。首先,供电模块不能使用复杂而且昂贵的方案。其次,能源 有限的限制又要求所有的器件必须都是低功耗的。最后,传感器不能使用精度太 高、线性很好的部件,这样会造成传感器模块成本过高。 传感器节点在实现各种网络协议和应用系统时,存在以下现实约束。 (1)电源能量有限 传感器节点体积微小,通常携带能量十分有限的电池。由于传感器节点个数 多、成本要求低廉、分布区域广,而且部署区域环境复杂,有些区域甚至人员不 能达到,所以传感器节点通过更换电池的方式来补充能源是不现实的。如何高效 使用能量来最大化网络生命周期是传感器网络面临的首要挑战。 传感器节点消耗能量的模块包括传感器模块、处理器模块和无线通信模块。 随着集成电路工艺的进步,处理器和传感器模块的功耗变得很低,绝大部分能量 消耗在无线通信模块上。 无线通信模块存在发送、接收、空闲和休眠四种状态。无线通信模块在空闲 状态一直监听无线信道的使用情况,检查是否有数据发送给自己,而在睡眠状态 则关闭通信模块。从图中可以看到,无线通信模块在发送状态的能量消耗最大, 在空闲状态和接收状态的能量消耗接近或略小于发送状态的能量消耗,在休眠状

电子科技大学硕士学位论文

态的能量消耗最少。如何让网络通信更有效率,减少不必要的转发和接收,在不 需要通信时通信进入休眠状态,是传感器网络协议设计需要重点考虑的问题。 (2)计算和存储能力有限 传感器节点是一种微型嵌入式设备,要求它价格低功耗小,这些限制必然导 致其携带的处理器能力比较弱,存储容量比较小。为了完成各种任务,传感器节 点需要完成监测数据的采集和转换、数据的管理和处理、应答汇聚节点的仟务请 求和节点控制等多种工作。因此如何有限的计算和存储资源完成诸多协同任务成 为传感器网络是设计的挑战。【47】

2.2.3无线传感器网络操作系统
WSN是一种分布式的自组织网络计算机系统,它由大量廉价的、能量有限的 多功能微型传感器节点组成。由于WSN的特殊性,导致其对操作系统的需求相对 于传统的操作系统有较大差异。因此,需要针对WSN的特点,研究和设计面向 WSN的操作系统(WSNOS)和相关软件。 同其它操作系统一样,WSNOS是为了提高软件的重用性、降低应用开发的难 度,它应该提供物理设备的抽象和高协调性的通用函数实现。其独特性在于资源 极端受限(处理器速度、存储器大小、内存大小、通讯带宽、资源数量以及电源 受限)、设备的特殊性和缺乏一致的抽象层次。因此,WSNOS的设计目标是高效 地使用传感器节点的有限资源,且能够对各种特定应用提供最大的支持。其设计 策略应该是一个资源库,从中抽取一部分组成应用。它致力于提供有限资源的并 发,而不是提供接口或形式。在面向WSN的操作系统支持下,利用有限资源对整 体系统进行高效率的事件处理、能源管理、命令处理和工作描述。 此外,在传感器网络中,单个传感器节点有两个突出特点:一是它的并发性 很密集,即可能存在多个需要同时执行的逻辑控制,需要操作系统能够有效地满 足这种发生频率、并发程度很高、执行过程比较短的逻辑控制流程;另外,传感 器节点的模块化程度很高,要求操作系统能够让应用程序方便地对硬件进行控制, 且在保证不影响整体开销的前提下,应用程序的各个部分能够比较方便地进行重 新组合。 对WSNOS的研究涉及的内容很多,如任务管理、内存管理、低功耗通讯协 议、电源管理、文件系统等。本文主要从内核调度的角度出发,探讨如何提高系 统的实时性和可靠性。考虑到单个传感器节点的硬件资源有限,如果采用传统的

12

第二章无线传感器网络节点及操作系统简介

进程调度方法,首先硬件就无法提供足够的支持;其次,由于传感器节点的并发操 作可能比较频繁,而且并发执行流程又很短,这也使得传统的进程/线程调度无法 适应。所以,WSNOS一般采用比线程更为简单的轻量级线程技术和两级调度方式, 以有效利用传感器节点的有限资源归纳起来,WSN的特点决定了其操作系统的特 点如下:


(1)由于节点存储资源极其有限,WSNOS应该可以根据不同的应用系统进行 裁剪和扩充,只实现必要的功能,从而以最小的代码量满足系统需求。 (21在WSN中,操作系统和应用程序的区分并不明显。它们在宿主机上一起 被编译,然后烧写到目标节点上,目标代码中同时包含了两者。另外,操作系统 和应用程序在同一地址空间上运行,它们对硬件的访问权限相同,也就是说应用 程序可以直接操纵硬件资源。所以在本质上,所有代码都是应用程序。 (3)为了有效利用电能,降低功耗,大多数WSNOS使用事件驱动模型。当没 有任务需要处理时,CPU睡眠,尔后由外部事件来唤醒。 (4)WSNOS通常采用微内核结构,其核心只提供操作系统的基本功能,如进 程/线程调度与同步、中断管理、时钟管理、原子操作等。其它功能模块如文件系 统、存储管理、通信协议栈都可看成可选的应用。 (5)WSNOS具有可重构能力。当节点工作失常时,要求能自恢复自组织。 (6)WSNOS是一个分布式操作系统,没有中心服务器。

2.2.4无线传感器网络节点操作系统的设计目标
由于无线传感器网络所具备的特征以及网络中节点的特点,就决定了网络节 点的操作系统设计应满足如下要求: (1)小代码量:由于节点的内存有限,因此操作系统核心代码量必须比较小, 使其可以在有限的空间中,具备高效管理硬件的能力。 (2)模块化:无线传感器网络设计的趋势是针对特定的应用而并不是普遍的应 用。不同的应用所需要的硬件平台是不相同的。随着无线传感器网络的广泛应用, 节点构成的变化是巨大的。在特定的硬件平台上,根据不同的应用快速便利地结 合软件模块实现应用是非常重要的。 (3)低功耗:WSN的大多数节点采用电池供电。由于节点数量众多,以及节点 被撒布的环境使更换节点的电池是不可行的甚至是不可能的。因此低功耗的操作 将延长整个网络的生命周期,是操作系统设计必须满足的条件。

电子科技大学硕士学位论文

(4)并发操作:在传感器网络的节点上存在着大量的并发操作,如数据采样发 可能在同时进行。操作系统需要具备支持严格并发操作的能力。 (5)健壮性:WSN节点数量的众多以及运行特殊的环境,要求运行在单个节点 上的操作系统不但健壮,而且应该便利地适应于可靠的分布式应用的发展。 (6)容错性:传感器网络中的传感器经常会由于周围环境或电源耗尽等原因而 失效。由于环境或其他原因,物理地维护或替换失效传感器常常是十分困难或不 可能的。这样,传感器网络操作系统必须具有很强的容错性,以保证系统具有高 强壮性。当网络的软、硬件出现故障时,系统能够通过自动调整或自动重构纠正 错误,保证网络正常工作。

2.3目前流行的几种无线传感器网络节点操作系统
在WSNOS的研究上,国外许多大学、研究机构或商业组织都参与其中。到 目前为止,已经开始出现一些面向WSN的操作系统。按内核调度策略可分为两类: 一类是面向强实时应用的抢占式操作系统,如MANTIS OS,SNOW-OS,Contiki 等;另一类是面向弱实时应用的非抢占操作系统,典型的有TinyOS,BTnode
NuffOS,EYES OS,

OS等。为了有效利用节点上的能量,延长电池的使用寿命,其中大
OS,Contiki,

多数WSNOS采用基于事件的编程模型,如TinyOS,BTnodeOS,EYES

NuOOS等。此外,为了提高系统灵活性,增强系统功能,各个WSNOS在内核的 基础上都作了不同程度的扩展,如BTnode OS支持蓝牙和GSM,NuffOS采用动 态堆栈分配并支持许多网络组件如TCP/IP,ARP,ICMP,MANTIS OS提供了一个可 选的动态内存分配,Contiki支持动态下载程序。其它用于WSN的操作系统还有
MicroC/OS,DCOS,Topsy v3,SenOS,TelOS,AvrX,Scout,OwlOS等,但它们仍然不

能满足不断发展的无线传感器网络的应用要求,新的面向特定应用的WSNOS仍 然不断被提出【w。


在现有的众多WSNOS中,使用最广泛的当属加州大学伯利克分校依托 Smartdust项目开发出来的TinyOS。它是一个开源的轻量级嵌入式操作系统,其特 点是体积小、结构高度模块化、基于组件的架构方式、低功耗等,这使得它能够 突破传感器节点各种苛刻的限制,可快速实现各种应用,非常适合WSN的特点和 应用需求,因而被广泛应用于WSN中,并成为很多系统的参考设计。据统计,世 界上有超过500家公司或研究机构在使用TinyOS进行学术研究或商业开发。 TinyOS是典型的WSN操作系统,本文就其内核调度机制进行讨论,并提出了相
14

第二章无线传感器网络节点及操作系统简介

应的改进方案,实验结果证明了其有效性,同时针对他的移植性进行研究,提出 一套移植方案并进行实施。

2.4本章小结
本章论述无线传感器网络网络体系结构,依据无线传感器网络的基本特点和 主要性能,介绍无线传感器网络节点的结构和特点,介绍无线传感器网络操作系 统的特点和几种常见的操作系统,是以后几章研究的基础。

电子科技大学硕士学位论文

第三章TinyOS的研究

在以上章节中我们支持无线传感器节点的嵌入式操作系统的WSN设计目标 和特点进行了分析。以下章节,主要介绍当前比较流行的WSNOS之一TinyOS。 对于这种操作系统,首先介绍其总体框架内容,然后从操作系统的角度来介绍任 务管理和内存管理等OS内核;考虑到WSN以数据通讯为中心和低功耗的两大特 点,介绍通讯的基本原理、低功耗通讯协议和一些低功耗实现技术,如:电源管 理服务、编译器技术、分布式处理、数据压缩等。
3.1

Tiny0S的简介
TinyOS是一种面向无线传感器网络的新型操作系统,它最初是用汇编和c语

言编写的。但科研人员的进一步的研究发现,c语言不能有效、方便地支持面向无 线传感器网络的应用和操作系统开发。为此,他们经过仔细研究和设计,对C语 言进行了一定扩展,提出了支持组件化编程的nosC语言。把组件化,模块化思想和 基于事件驱动的执行模型结合起来。TinyOS和基于TinyOS的应用基本上用nesC 语言编写,与以前相比,提高了应用开发的方便性和应用执行的可靠性。我们可 以把TinyOS和在其上运行的应用程序堪称是一个大的执行程序,它是由许多功能 独立且相互联系的软件组件(component)构成的,如图3.1所示。一个组件(假定组 件名为ComA)--般会提供一些接la(interface)。接口可以看作是这个软件组件实现 的一组函数声明。接口即可以是命令和事件,也可以是单独定义的一组命令事件, 如StdControl接1:3是一个拥有三个命令“iltit,start,stop’,的组合接口。其他组件通 过应用相同接口声明,就可以使用这个组件(Coma)的函数,从而实现组件间的功 能相互调用。

16

第三章YmyOS的研究

图3-1基于nesC一般应用程序的设计

TinyOS采用基于组件的编程模型,应用程序由一个或多个组件构成。组件 包括两类:模块(module)和配置(configuration),组件间通过配置文件连接在一起, 形成一个可执行程序。组件提供或使用接口,这些接口是双向的并且是访问组件 的唯一途径。每个接口都定义了一系列函数,包括命令(∞mmand)和事件(event)两 类。对于命令,接口的提供者必须实现它;而对于事件,接口的使用者必须提供 实现。组件的功能模块如图3.2所示,它包括一组命令处理函数、一组事件处理函 数、一组任务集合和一个描述状态信息和固定数据结构的框架。除了WSNOS提 供的处理器初始化、系统调度和C运行时库(C Run-Time)3个组件是必需的以外, 每个应用程序可以非常灵活地选择和使用TinyOS组件。

图3-2

组件的功能模块

图3-3是TinyOS的总体框架。物理层硬件为框架的最底层,传感器、收发器 以及时钟等硬件能触发事件的发生,交由上层处理,相对下层的组件也能触发事
17

电子科技大学硕士学位论文

件交由上层处理,而上层会发出命令给下层处理【141。为了协调各个组件任务的有 序处理,需要操作系统采取一定的调度机制。




命令


度 策 略

上‘ 7I

Il

彳t
;;

}i……t~梦
I l

l硬件[二]
图3—3 Tiny0S的总体框架

与一般的嵌入式操作系统相比,TinyOS有其自身的特点:采用模块化设计, 所以核心尺寸小(一般来说核心代码和数据大概在400Bytes左右),可突破WSN存 储资源少的限制;基于可重用组件的体系结构;使用事件驱动模型,通过事件触 发来唤醒CPU工作;单一任务栈:内核非常简单,甚至在严格意义上说,称不上 内核:没有进程管理和虚拟存储。这些特点使得TinyOS非常适合WSN的需求, 所以它得到了广泛应用[4l】。

3.2调度机制和组件模型 3.2.1调度机制
TinyOS提供任务加事件的两级调度。任务一般用于对时间要求不高的应用中, 它实际上是一种延迟计算机制。任务之间互相平等,没有优先级之分,所以任务 的调度采用简单的FIFO。任务间互不抢占,而事件(大多数情况下是中断)可抢占。 即任务一旦运行,就必须执行至结束,当任务主动放弃CPU使用权时才能运行下 一个任务,所以T'myOS实际上是一种不可剥夺型内核。内核主要负责管理各个任 务,并决定何时执行哪个任务。 为了减少中断服务程序的运行时间,降低中断响应延迟,中断服务程序的设 计应尽可能精简,以此来缩短中断响应时间。TinyOS把一些不需要在中断服务程 序中立即执行的代码以函数的形式封装成任务,在中断服务程序中将任务函数地

第兰章"FmyOS的研究

址放入任务队列,退出中断服务程序后由内核调度执行。内核使用一个循环队列 来维护任务列表。默认情况下,任务列表大小为8。图34是任务队列为空时的情 形,图3.5表示有三个任务在队列中等待处理。内核根据任务进入队列的先后顺序 依次调度执行,即调度算法为简单的FIFO。TOSH 中取出指针TOSH
TOSH
run ruff

next

task0函数负责从队列

sched

full所指的任务并执行。内核在一个无限循环中调用

next

task0,当队列不为空时依次执行所有任务函数。

图34队列为空情形

图3.5队列中有3个任务

由前所述,TinyOS调度模型有以下特点: (1)任务单线程运行到结束,只分配单个任务栈,这对内存受限的系统很 有利 (2)没有进程管理的概念,对任务按简单的FIFO队列进行调度。对资源采 取预先分配,且目前这个队列里最多只能有7个待运行的任务 (3)FIFO的任务调度策略是电源敏感的。当任务队列为空时,处理器休眠, 随后由外部事件唤醒CPU进行任务调度 (4)?两级的调度结构可以实现优先执行少量同事件相关的处理,同时打断 长时间运行的任务 (5)基于事件的调度策略,只需少量空间就可获得并发性,并允许独立的 组件共享单个执行上下文。同事件相关的任务集合可以很快被处理,不允许阻塞, 具有高度并发性 (6)任务之间互相平等,没有优先级的概念.

19

电子科技大学硕士学位论文

3.2.2组件模型
TinyOS包含了经过特殊设计的组件模型,其目标是高效率的模块化和易于构 造组件型应用软件。对于嵌入式系统来说,为了提高可靠性而又不牺牲性能,建 立高效的组件模型是必需的。组件模型允许应用程序开发人员方便快捷地将独立 的组件组合到各层配置文件,并在面对应用程序的顶层(t叩.1wcl)配置文件中完成 应用的整体配置。

泊息

消息包

宇节

图3—6支持多跳无线通信的无线传感器网络应用程序的组件结构 nesC作为一种C语言的组件化扩展,可表达组件以及组件之间的事栩命令接 口。在nesC中,多个命令和事件可以成组地定义在接口中,接口则简化组件之间 的相互连接。在TinyOS中,每个模块有一组命令和事件组成,这些命令事件成为 该模块的接口。换句话说,一个完整的系统说明书就是一个其所要包含的组件列 表加上对该组件间相互关联的说明。TinyOS的组件有四个相互关联的部分:一组命 令处理程序旬柄、一组事件处理程序句柄、一个经过封装的私有数据帧,一组简 单任务。任务、命令和事件处理程序在帧的上下文中执行并切换帧的状态。为了 易于实现模块化,每个组件还声明了自己使用的接口及其要用信号通知的事件, 这些声明将用于组件的相互连接。 图3-6所示为一个支持多跳无线通信的组件集合与这些组件之间的关系。上层 组件对下层组件发命令,下层组件对上层组件发信号通知事件的发生,最低层的 组件直接和硬件打交道。

20

第三章TmyOS的研究

TinyOS采用静态分配存储帧,这样在编译时就可以决定全部应用程序需要的 存储器空间。帧是一种特殊的复合c语法的结构体,它不仅采用静态分配而且只 能由其所属的组件直接访问。TmyOS不提供动态的储存保护,组件之间的变量越 权访问检查是在编译过程中完成的。除了允许计算存储器空间要求的最大值,帧 的预分配还可以消除与动态分配相关的额外开销,并且可以避免与指针相关的错 误。另外预分配还可以节省执行时间的开销,因为变量的位置在编译时就确定了, 而不是通过指针动态地访问其状态。


在TinyOS中,命令是对下层组件的非阻塞请求。典型情况下,命令将请求的 参数储存在本地的帧中,并为后期的执行有条件地产生一个任务。’命令也可以调 用下层组件的命令,但是不必等待长时间的或延迟时间不确定的动作发生。命令 必须通过返回值为其调用者提供反馈信息,如缓存区溢出返回失败等。事件处理 程序被激活后,就可以直接或间接地处理硬件事件。这里首先要对程序执行逻辑 的层次进行定义。越接近硬件处理的程序逻辑,则其程序逻辑的层次越低,处于 整个软件体系的下层。越接近应用程序的程序逻辑,则其程序逻辑的层次越高, 处于整个软件体系的上层。命令和事件都是为了完成在其组件状态上下文中出现 的规模小且开销固定的工作。最底层的组件可以直接处理硬件中断的处理程序, 这些硬件中断可能是外部中断、定时器事件或者计算器时间事件。事件的处理程 序可以存储信息到其所在的帧,可以创建任务,可以向上层发送事件发生的信号, 也可以调用下层命令。硬件事件可以出发一连串的处理,其执行方向,既可以通 过事件向上执行,也可以通过命令向下调用。为了避免命令/事件链的死循环,不 可以通过信号机制向上调用命令。 任务是完成TinyOS应用主要工作的轻量级线程。任务具有原子性,一旦运行 就要运行至完成,不能被其他任务中断。但任务的执行可以被硬件中断产生的事 件中断。任务可以调用下层命令,可以向上层发信号通知事件发生,也可以在组 件内部调度其他任务。任务执行的原子特性,简化了TinyOS的调度设计,使得 TinyOS仅仅需要分配一个任务堆栈就可以保存任务执行中的临时数据。该堆栈仅 由当前执行的任务占有。这样的设计对于存储空间受限的系统是高效的。任务在 每个组件中模拟了并发性,因为任务相对于事件而言是异步执行的。然而,任务 不能阻塞,也不能空等待,否则将会阻止其他组件的运行。
3.2.2.1

Tiny0S的组件类型

TinyOS中的组件通常可以分为以下三类:硬件抽象组件、合成组件、高层次软
21

电子科技大学硕士学位论文

件组件。硬件抽象组件将物理硬件映射到TinyOS组件模型。RFM射频组件是这 种组件的代表,该组件的帧包含射频模块当前的状态,如收发器处于发送模式还 是接收模式、当前的数据传输率等。RFM处理硬件中断并根据操作模式将其转化

为接收(Rx啦事件或发送(T购位事件。在RFM组件中没有任务,这是因为硬件自
身提供了并发控制。该硬件资源抽象模型涵盖的范围从非常简单的资源(如I/O引 脚)到十分复杂的资源(如加密加速器)。
?

合成硬件组件模拟高级硬件行为。这种组件的一个例子就是Radio Byte组件。 它将数据以字节为单位与上层组件交互,以位为单位与下面的RFM模块交互。组 件内部的任务完成数据的简单编码或者解码工作。从概念上讲,该模块是一个能 够直接构成增强型硬件的状态机。从更高层次上看,该组件提供了一个硬件抽象 模块,将无线接口映射到UART设备接口上。提供了与UART接口相同的命令, 发送信号通知相同的事件,处理相同粒度的数据,并且在组件内部执行类似的任 务(查找起始位或符号、执行简单编码等)。 高层次软件模块完成控制、路由以及数据传输等。这种类型组件的一个例子 是主动消息处理模块,它履行在传输前填充包缓冲区以及将收到的消息分发给相 应任务的功能。 3.2.2.2硬件/软件边界 TinyOS的组件模型使硬件/软件边界能够比较方便地迁移,因为TinyOS所采 用的基于事件的软件模型是对底层硬件的有效扩展和补充。另外,在ThayOS设计 中采用的固定数据结构大小、存储空间的预分配等技术都有利于硬件化这些软件 组件。从软件迁移到硬件对于无线传感器网络来说是特别重要的,因为在无线传 感器网络中,系统的设计者为了满足各种需求,需要获得集成度、电源管理和系 统成本之间的折中方案。 3.2.2.3组件组合 为了支持TinyOS的模块化特性,TinyOS工作小组开发了一整套工具用于帮 助开发者将组件连接起来。在TinyOS中,组件在编译时被连接在一起,消除了不 必要的运行期间的系统开销。为了便于组合,在每个组件文件的开始描述该组件 的外部接口。在这些文件中,组件实现了要提供给外部的命令和要处理的事件, 同时也列出了要发信号通知的事件及其所使用的命令。从逻辑上讲,可把每个组 件的输入输出看成I/O引脚,就好像组件是一种物理硬件。组件的向上和向下的接

第三章T'myO¥的研究

口的这种完整描述被编译器用于自动生成组件的头文件。如图3.7所示组件文件的 示例,用于使LED闪烁的简单应用程序。该文件可以被分为两部分:第一部分直接 列出了应用程序所包含的模块;第二部分列出了每个组件的接口之间的连接关系。
configuration

Blink(



implementation(
compop.ents

Main,B1inkM。Sin#eTimer,LedsC;

Main.SMConlrol一》Sin西ffI'imer.SMControl;

Ma缸St.dControl一>B1inlcMStdCo曲-ol:
BliddVLTimer一》Sin百eTimer.Timer; Blink_M:I舟ds-->LedsC; ) 图3.7

Blink组件组合应用

3.3事件驱动机制与能量管理机制 3.3.1事件驱动机制
为了满足无线传感器网络需要的高水平的运行效率,TinyOS使用基于事件的 执行方式。事件模块允许高效的并发处理运行在一个较小的空间内。相比之下, 基于线程的操作系统则需要为每个上下文切换预先分配堆栈空间。此外,线程系 统上下文切换的开销是明显高于基于事件的系统。为了高效的利用CPU,基于事 件的操作系统将产生低功耗的操作。限制能量消耗的关键因素是如何识别何时没 有重要的工作去做而进入极低功耗的状态基于事件的操作系统强迫应用使用完毕 CPU时隐式声明。在TinyOS中当事件被触发后,与发出信号的事件关联的所有任 务将被迅速处理。当该事件以及所有关联任务被处理完毕,未被使用的CPU循环 被置于睡眠状态而不是积极寻找下一个活跃的事件。TinyOS这种事件驱动方式使 得系统高效地使用CPU资源,保证了能量的高效利用。 TinyOS这种事件驱动操作系统。当一个任务完成后,就可以使其触发一个事 件,然后TinyOS就会自动地调用相应的处理函数。事件驱动分为硬件事件驱动和 软件事件驱动。硬件事件驱动也就是一个硬件发出中断,然后进入中断处理函数。

电子科技大学硕士学位论文

而软件驱动则是通过signal关键字触发一个事件。我们在这里所说的软件驱动是相 对于硬件驱动而言的,主要用于在特定的操作完成后,系统通知相应程序作一些 适当的处理。我们以Blink程序为例阐述硬件事件处理机制。Blink程序中,是让 定时器每隔1000ms产生一个硬件时钟中断。在基于ATMega 128L的节点中,时 钟中断是15号中断。



图3-8定时器服务启动流程图 如图3.8所示通过调用BI'mkM.StdContr01.staxt)开启了一个时钟中断中断向量 表是处理器处理中断事件的函数调度表格,它的位置和格式与处理器设计相关。 有的处理器规定中断向量表直接存放中断处理函数的地址,又处理器产生跳转指 令进入处理地点,如中断向量存放0x3456,处理器在发生中断时,组织一条中断 调用指令执行0x3456处的代码:还有一些则是为每个中断在表中提供一定的地址 空间,产生中断时系统直接跳转到中断向量的位置执行。后一种情况直接在中断 向量处存放中断处理代码,不用处理器组织跳转指令。不过一般与留给中断向量 的空间有限,如果处理函数比较复杂,一般都会在中断向量的位置保存一条跳转 指令。ATMegn 128L处理器的中断向量的组织使用的是后一种处理方式。中断向 量表是在编译连接是根据库函数的定义连接的。0号中断是初始化(reset)中断,l-43 号中断根据各个处理器的方式,首先硬件无法提供足够的支持;其次,由于节点的 并发操作比较频繁,而且并发操作执行流程又很短,这也使得传统的进程,线程调

蔓三兰塑!堕堑塞
度无法适应。 TmyOS采用比一般线程更为简单的轻量级线程技术和两层调度方式:高优先 级的硬件事件旬柄(hardware
event

handle姻)以及使用FIFO调度的低优先级的轻量

级线程((task,即TinyOS中的任务),如图3-9所示。
bool

1DsI{却玛nezt-t∞k0 l

if(TOSH_sched_full---=
TOs珏一scbed-:free){
re'Run

O:

l else{

移除队列头的任务, 执仃z--,l亥任务,
Re七urn

/哪弋盎㈨Ⅷ
AVR.

i:'

widlD钮甜m tagk(){

眦le㈣鲥"m∞目t_task0)


\F盯o

g畿滞出
、‘RL咄dRcvd

1DsH—sle印0;
TOSH_wait







图3—9 TinyOS的调度结构

图3—10部分源代码

任务之间不允许相互抢占;而硬件事件句柄,即中断处理线程可以抢占用户的 任务和低优先级的中断处理线程,保证硬件中断快速响应。TinyOS的任务队列如 果为空,则让处理器进入极低功耗的SLEEP模式。但是保留外围设备的运行,以 至于他们中的任何一个可以唤醒系统。部分调度程序源代码如图3.10,其中TOSH
run next

task

0函数判断队列是否为空,如果是则返回0,系统进入睡眠模式,否则

做出队列操作并执行队列该项所指向的任务返回1。一旦任务队列为空,另一个任 务能被调度的唯一条件是事件触发的结果;因而不需要唤醒调度程序直到硬件事件 的触发活动。TinyOS的调度策略具有能量意识。

3.3.2能量管理机制
无线传感器网络节点运行在人无法接近甚至危险的远程环境中,加上电源能 量有限,所以设计有效的策略来减少能量消耗、延长网络生存时间一直是研究的 热点和难点。无线传感器网络的能量问题需要考虑无线传感器网络的特性,并将 多种性能指标结合起来考虑。这是一个涉及软硬件,涉及多层通信协议的复杂问 题。

电子科技大学硕士学位论文

从节点操作系统这一层面上TinyOS采用相互关联的三个部分进行能量管理。 首先,每个设备都可以通过调用自身的StdContr01.stop命令停止该设备:负责管理 外围硬件设备的组件将切换该设备到低功。其次,TinyOS通过提供 HPLPowerManagement组件通过检测处理器的I/O管脚和控制寄存器识别当前硬件 的状态将处理器转入相应的低功耗模式。另外,TinyOS的定时器服务可以工作在 大多数处理器的极低功耗的省电模式下。
3.4

TinyOS通信模型

3.4.1主动消息概述
主动消息模式Active Messages(AM)是一个面向消息通信的高性能通信模式, 早期一般应用于并行和分布式计算机系统中。在主动消息通信方式中,每一个消 息都维护一个应用层的处理器。当目标节点收到这个消息后,就会把消息中的数 据作为参数,并传递给应用层的处理器处理。应用层处理器一般完成消息数据的 解包操作、计算机处理或发送影响消息等工作。在这种情况下,网络就像是一条 包含最小消息缓冲区的流水线,从而消除了一般通信协议中经常的缓冲区处理方 面的困难情况。为了避免网络拥塞,还需要消息处理能够实现一步执行机制。 尽管主动消息起源于并行和分布计算领域,但其基本思想适合无线传感器网 络的需求。主动消息的轻量体系结构在设计上同时考虑了通信框架的可扩展性和 有效性。主动消息不但可以让应用程序开发者避免使用忙等方式等待消息数据的 到来,而且可以在通信与计算之间形成重叠,这可以极大地提高CPU的使用效率, 并减少节点的能耗。

3.4.2主动消息的设计与实现
在无线传感器网络中采用主动消息机制的主要目的是使无线传感器网络节点 的计算和通信重叠,让软件层的通信原语与无线传感器网络节点的硬件能力匹配, 充分节省无线传感器网络节点的有限存储空间。可以把主动消息通讯模型看作一 个分布式事件模型,在这个模型中各个节点相互间可并发地发送消息:为了让主 动消息更适合于无线传感器网络的需求,要求主动消息至少提供三个最基本的通 信机制:带确认信息的消息传递,有明确的消息地址,消息分发。应用程序可以进 一步增加其他通信机制以满足特定的要求。如果把主动消息通信实现为一个

第三章TmyOS的研究

T'myOS的系统组件,则可以屏蔽下层的通信硬件,为上层应用提供基本的、一致 的通信原语,方便应用程序开发人员开发各种应用。在基本通信原语的支持下, 开发人员可以实现各种功能的高层通信组件,如可靠性传输的组件、加密传输的 组件等。这样上层应用可以根据具体需求,选择合适的通信组件。在无线传感器 网络中,由于应用的千差万别和硬件的功能有限,T'myOS不可能提供功能丰富的 通信组件,而只能提供最基本的通信组件,最后由应用程序选择或定制所需要的 特殊通信组件。 由于TinyOS不支持动态内存分配,所以在主动消息通信组件中保存了一个固 定尺寸且预先分配好的缓存队列。如果一个应用程序需要同时存储多个消息,则 需要在其私有数据帧上静态分配额为的空间以保存消息。事实上在TinyOS中,所 有的数据分配都是在编译时确定的“”。

3.4.3主动通信的缓存管理机制
在TinyOS的主动通信实现中,如何实现消息的存储管理对通信效率的显著影 响。当数据通过网络到达节点时,首先要进行缓存,然后主动消息的分发(dispatch) 层把缓存中的消息交给上层应用处理。在许多情况下;应用程序需要保留缓存中 的数据,以便实现多跳.(mufli-hop)通信。如果节点上的系统不支持动态内存分配, 则实现动态申请消息缓存就比较困难。TinyOS为了解决该问题,要求每个应用程 序在消息被释放后,能够返回一块未用的消息缓存,用于接收下一个即将到来的 消息。在TinyOS中,各个应用程序之间的执行是不能互相抢占的,所以不会出现 多个未使用的消息缓存发生冲突,这样TmyOS主动消息通信组件只需要维持一个 额外的消息缓存用于接收下一个消息。

3.4.4主动消息的显式确认消息机制
由于TinyOS只提供best-effort消息传递机制,所以在接收方提供确认反馈信 息给发送方以确定发送是否成功是很重要的。采用简单的确认反馈机制可极大简 化路由和可靠传递算法。 在TinyOS中,每次消息发送后,。接收方都会发送—个同步的确认消息。在 TinyOS主动消息层的最底层生成消息确认包,这样比在应用层生成确认消息包省 开销,反馈时间短。为了近一步节省开销,TinyOS仅仅发送一个特殊的立即数作 为确认消息的内容。这样发送方可以在很短的时间内确定接收方是否需要重新发

电子科技大学硕士学位论文

送消息。从总体上看,这种简单的显式确认通信机制适合无线传感器网络的有效 资源,是一种有效的通信手段。

3.5本章小结
本章着重从TinyOS的时间驱动机制,组件模型,调度机制,通信机制等方面 进行研究,分析了TinyOS操作系统的特点和独特性,对后文工作起到基础性作用。 特别是TinyOS的调度机制,第五章对TinyOS调度机制的改进就是建立在本章的 之上的。

第四章n∞c语言及其编译器的研究与改进

第四章nesC语言及其编译器的研究与改进

4.1

nesC语言介绍 nest设计要求与基本思想

4.1.1

ncsC是c语言的一个扩展。设计这个语言的初衷是实现结构化概念和基于事 件的执行模式。ncsC的设计中要满足以下要求: (1)nesC是C语言的一个扩展:c语言可以为所有在传感器网络中可能被用到 的目标微控制器生成了高效代码。c为硬件访问提供了所有必要的底层功能部件, 并且简化了和现存C代码的交互过程。而且许多程序开发人员都熟悉c语言。但 是,c语言也有很多的不足之处:c语言在安全性和应用程序结构化方面做的工作 很不够。ncsC需要通过控制表达能力来提供安全性,通过组件来实现结构化设计。 (2)整体程序分析:节点的应用程序的大小都很有限,这使得整体程序分析成为 现实。ncsC的编译器要对用ncsC编写的程序进行整体程序分析(为安全性考虑) 和整体程序优化。为性能考虑。 (3)ncsC是一个“静态语言,nesC的组件模型和参数化的接口减少了许多动 态内存分配和动态分发的需求。用ncsC编写的程序里不存在动态内存分配,而且 在编译期间就可以确定函数调用流程。这些限制使得整体程序分析和优化操作得 以简化,同时操作也更加精确。


(4)ncsC支持和反映基于事件的并发控制模型:基于组件概念的ncsC直接支持 基于事件的并发控制模型。此外,neaC要设计应对共享数据访问的策略。 ncsC体现了6个基本思想: (1)分离构造和组成:程序由组合(绑定)在一起的组件构成。组件定义了两个 作用域,一个用于它们的规范(specification),包含了接口实例的名字。另一个用 于实现。组件之间有以任务的形式出现的内部并发操作。控制线程通过组件的 接口传入组件。这些线程源于任务或者硬件中断。 (2)通过一组接口说明组件行为:组件可以提供接口,也可以使用接口。组件 提供的接口描述组件为它的使用者提供的功能,.组件使用的接口描述组件在完 成任务时需要的功能。

电子科技大学硕士擎位论文

(3)双向的接口:接口指定了接口的提供者需要实现的一组函数(命令),和接 口的使用者需要实现的一组函数(事件)。这种机制使得一个接口可以描述两个组 件间的复杂的交互作用。这个概念很重要,因为在基于事件的并发模型中,所 有费时的命令(如“send packet”)的是非阻塞的;这些命令完成时会触发一个事件 (事件“senddone”)。通过指定接口,可以阻止组件在尚未提供事件sendDone的 实现的情况下调用命令send。通常命令调用是向下的,比如,从应用组件到那 些更接近硬件的组件,而事件调用是向上的。一些特定的原始事件和硬件中断 捆绑在一起。 (4)组件之间通过它们的接口静态地连接在一起:这个概念提高了运行效率、 设计的健壮性,而且更有利于程序的静态分析。 (5)设计nesC时期望由“整体程序”编译器产生代码:这个概念更有利于良 好代码的产生和分析。编译时刻数据竞争分析是一个很好的例子。 (6)nesC的并发控制模型是基于任务和中断处理程序的。任务一旦开始运 行,就一直运行到任务结束为止,中间不会有别的任务来抢先执行。而中断处 理程序可抢先任务或者其他的处理程序。如果中断处理程序引发了潜在的数据 竞争,nesC的编译器会发出相应的信息【l】。

4.1.2组件设计
nesC的应用程序通过编写、组合组件(components)构造而成。一个组件提供和 使用接口(interface)。组件的使用者只能通过这些接口访问组件。一个接口通常代 表某项服务,并且会有一个接口类型说明。nesC中的接口是双向的:它们包括命令 (command)和事件(event),两者都是必要的函数。接口的提供者要实现接口的命令, 而事件由接口的使用者来实现。将命令请求和事件响应放在同一个接口中,轻而 易举就实现了分段操作。 在组件中,将接口类型的定义和接口的使用分离有助于定义标准接口让组件 有更高的可重用性和更大的弹性。一个组件可以提供和使用同种接口类型,也可 以多次提供同一个接口类型。组件同时是抽象软硬件之间的边界一个简明的方法。 双向接口使得支持硬件中断变得非常简单。相反的,基于过程调用的单行接口不 得不采用硬件轮询,或者采用两个独立的接口分别处理硬件操作和相应的中断。 nest中有两种组件:module和configuration.Module类型的组件提供应用程序 代码,实现一个或多个接口。configuration类型的组件用于将别的组件绑定在一起,

第四章ncsc语言及其编译罂的研究与改进

将组件使用的接口连接到其它组件提供的接口上。NesC的每个应用程序都有一个 顶层的configuration类型的组件,这个组件将该应用程序使用的组件绑定在一起。 module类型的组件的内容用类似于C的代码写成,当然了,其中也有一些扩展。 某个接口i的某个命令,事件f用’,i.f'表示。命令调用类似于通常的函数调用,只是 加了一个关键字call作为前缀,类似的,一个事件的触发也和函数调用差不多, 只是多了一个关键字前缀signal。命令/事件的定义也有关键字command/event作为 前缀。这些批注符号能够很好地提高程序代码的清晰度。一个组件的一个接口可 能被绑定0次,1次或者多次。结果,任意数量的命令调用表达式都可以绑定到单 独的一个命令实现上(扇入),并且单独的一个命令调用表达式可以连接至Ⅱ任意数量 的命令实现上(扇出)。nesC允许扇出为O,前提是module类型的组件为未绑定的命 令提供了一个缺省的实现。只要命令的返回值有一个用于合并所有调用结果的关 联函数,扇出大于l的情况也是允许的。相应地,事件触发表达式的处理也是一 样的。组件之间通过接口显式绑定,有了这个措施之后就不再需要函数指针类型 了,这也使得组件之间的控制流变成显式的了。Module类型的组件的变量是私有 的,而且我们并不提倡在组件之间实现数据共享。总之,以上这些做法都使得程 序员更容易编写正确的组件,将各个组件绑定到某个应用程序中时更容易了解各 个组件的行为。绝大多数组件都代表某项服务或者某个硬件装置,因此只存在一 个实例。然而,有些时候,创建某个组件的多个实例也是很有用的。在nesC中, 这只要用一个可选参数申明抽象组件(abstract component)就可以达到目的了;象组

件创建于编译期间、configuration类型的组件中。 4.1.3带参数接口与程序优化
为了实现普通语言中的运行期命令和事件匹配,nesC采用了带参数的接口。 如果一个组件申明了一个带参数列表的接口,那么实际的情况是这样的,组件是 为每个参数元组申明了一个独立的接口。带参的接口可以被用来生成主动消息:在 主动消息中,数据包包含一个数字验证信息,该数字指明了要执行的事件处理程 序。如果是绑定到带参的接口,就必需用一个编译期的常数指定一个具体的接口。 在module类型的组件中,一个带参接口的命令和事件的实现会接收额外的参 数,这些参数是用来指明选定的接口的,还有,在调用一个带参接口的命令/事件 时选择一个具体的接口。这最后的结构被翻译成一个运行期的匹配。然而,在程 序的configuration类型的组件中己经显式指明可能的匹配目标集合。此外,还有一

电子科技大学硕士学位论文

个优点,就是RAM不需要存储活动消息的匹配表。 除了数据竞争检测,nesC还充分利用组件模型的限制进行静态分析和优化。 neaC的编译器利用程序的调用流程图减少那些无法到达的代码和模块越界操作, 还有内联小函数。同时,那些由C的后端编译器进行的优化操作,如常数生成和 公共自表达式的消减,也都成为可能,当然,这些是属于扩展的跨组件优化了。 这些优化在很大程度上减少了内存开销和执行开销,而且这两样资源对嵌入式系 统而言是非常关键的。
4.1.4

nesC的发展

nest的设计为将来的工作展开了了几个关键的领域。这些发展大都属于以下 几类并发控制,增强ncsC的语言特性,还有开发网络嵌入式系统领域之外的应用 软件。 并发控制:nesC的并发模型提供短的原子操作,可以用来建立高层的同步机 制如信号量,条件变量,原子队列和锁。这些同步机制中的一部分意味着阻塞操 作。nesC本质上没有对阻塞操作的限制:只要在原子区域中禁止阻塞调用。目前原 子区域的实现是禁止中断,因为我们禁止阻塞操作并且限制了原子区域的长度, 所以该方法在嵌入式系统中工作良好。该方法中我们假定单独处理器并且不存在 虚拟内存机制(因为原子区域中不允许发生一个页错误)。然而这些假定在其他原子 区域的实现(如非阻塞的同步原语)下可以放宽。 增强语言特性:目前并发控制模型中的一些普通的概念在nest中尚没有很好 的实现。保存每个客户端状态的多客户端服务没有很好的支持。例如,每个客户 端希望不同的频率下受到定时事件的通用定时服务。抽象组件虽然可以被用于该 目的,但是存在着每个实例的内部状态私有的限制。目前可以使用参数接口来实 现这样的多客户端服务,用参数来对应客户数。但是没有完全的满足系统需要, 未来需要一个更好的解决方案。分段操作以较小的代价提供了高度的并发,但是 不利于编程。线性模型的重新引入可以大幅度简化编程。通过自动将阻塞操作转 换为分段调用,可以在不强制程序员手工扩展组件(目前的做法)的情况下获得轻量
级的并发。

支持其他应用:ncsC并不限制在嵌入式系统应用上。其面向组件的结构、关 注并发和双向的接口等概念在大型系统编程(如企业级应用和互联网服务)方面也 是很有价值的。为了有效的支持这些类型的应用,需要扩展nesC。首先,扩展nest

第四章nesC语言及其编译器的研究与改进

的编译时间分析来支持动态分配内存和组件。其次,扩展nesC的并发模型来支持 多个处理器,阻塞操作以及通用的线程概念。这样的实现将产生一个为了大规模 系统的组件化编程裁减的同步原语集合【21】。

4.2编译过程的分析与步骤提取
4.2.1

nesO语言的编译过程

nesC程序的编译主要分两步,首先调用hoe编译器把nesC预编译成c文件(即 是预编译过程);接着通过交叉编译器把C文件编译成可执行文件。假设目标平台 为MICA,下面对这个过程进行详细的介绍。 第一步,组件文件(.nc文件)的分析和转换,在这个阶段内调用TinyOS自带的 编译器nee,对基于组件思想编写的.ne源文件进行文法、语法分析,检测共享数据冲 突等,根据各个组件和接13对其使用的函数和变量进行名字扩展,使其具有全局唯 一性,最后把所有的函数和变量都整合到一个主函数main()中,并生成相应的app.c 文件.此时生成的已经是普通的C语言程序。以上这个替换过程由nee的核心程序 nesel.exe完成的。 第二步,在生成app.c文件之后,nee调用avr-gee的交叉编译工具对该C文件 进行编译、链接,便成为在MICA平台上可以运行的可执行文件,最后由下载程序 写入Flash。 nesC语言的整体编译过程图4.1所示。我们选取的平台是TinyOS支持的平台 MICA平台,其中左边四个方框代码第一个步骤,生成普通的c代码;右边两个 方框代表第二个步骤,生成可以在MICA平台上运行的二进制代码。nesC.compile 是一个perl脚本程序,由它来调用nee的核心程序nesel.

图p1 nesC语言的编译过程

电子科技大学硕士学位论文

4.2.2预编译过程
预编译的作用是将用类C语言(nesC)编写的源代码预映射成标准的C语言 代码。这部分的详细处理步骤有五步,图4-2所示,
‘.nC ‘C

图4-2预编译详细过程
4.2.2.1

noo步骤

我们知道,TinyOS运行在Windows下的模拟LINLrX环境Cygwin中,TinyOS 的语言是在C和汇编基础上而来的类C语言ncsC,而LINUX下的c编译器gee 不能编译组件式的nesC,因此,需要对gee进行扩展,这就是nco。 nCC是个perl脚本,它对gee进行扩展。当ncc被普通C文件调用时,它表现 为gee。而它当被ncsC文件(扩展名.no)调用时,则编译组件以及命令行指定的其 他文件。 从nGc起开始维护一个参数数组,并传递下去,控制预编译组装文件的顺序、 来源、方式。 例如,编译应用程序Surge.nc,执行命令:
noc—target=era78815一fnese-cfile=app.c Sureg.nc —I%T/lib/Broadeast—

1%T/lib/Queue—’I%T/lib/Route。。I%T/sensorboards/micasb

这样,指定的组件Surge.nc将被编译成名为app.c的标准C代码,-I所指定的 包括路径将首先被搜索,.target指定目标平台为em78815。 编写ace脚本,主要是对参数提取、设置和处理,这些参数的主要是与目标平 台相关的参数以及搜索路径等。 nncc语法
ncc

[-target砷elmieaMfiea2 rmica2dotl…】
[-nostdine]

[一tosdir=dir]

【-print-tosdir] [一doedir=dir]

【-print-platforms】 【-topdir=-dir]

[-board=micasbtbasiesblmieawbl…】
【-fnese,nido—tosnodes=n]

[-graphviz=yln]

【-fnesc-cfile=file】

[一fnese-no?inline[?Wnese-xxx】[any gee option]files… 例如,编译TinyOS目录/app下的应用程序Blink.nc时,在该应用目录下使用 命令nee-fiaese-cfile=app.c
Blink.nc

第四章nesC语言及其编译器的研究与改进

即可在相同目录下得到名为avp.c的C文件。 幼ncc选项 不被gee识别,只被floe识别的附加选项有:
-target=X

指定编译的目标。如果指定为pc,编译使用tossim环境,生产一个本她可执 行文件。默认目标为mica,T'myOS支持的目标在路径tos/platforms中。不支持的 平台可用,如果它的的路径被外在指定的.I选项。平台名是从路径名中取得,平台 路径被.platform文件识别。
-tosdir=dir

指定TinyOS的位置。该位置也可用环境变量TOSDIR来指定。如果变量和选 项都指定,ncc使用选项值。若环境变量和选项都没有指定,nee用TinyOS的 compiled-in路径。
-print-tosdir

打印使用和退出的TinyOS路径,要考虑.tosdir选项和环境变量TOSDIR。当 该选项被使用时,将不编译。
-print-platforms

打印有效的TinyOS平台,包括用.I指定的平台。
-nostdinc

搜索路径不自动包含"rinyOS目录。
-board=Y

指定一个或多个传感器板。这影响查找路径和预处理器符号。 传感器板集见tos/sensorboards目录。对于目标,传感器板路径可通过-I。传感 器板目录可被.seIlsor文件识别。
-docdir--dir

为dir路径中被编译的组件生产文档。
-topdir=dir

指定目录路径,当从源文件名中为文档文件生成包名时,它将被去除。TOSDIR 之上的目录被自动添加,因此,该选项只在主TinyOS分区以外被需要。

-graphviz刊n
在生成文档中明确地使能或禁止graphviz工具。没有该选项,graphviz仅当 dot程序在当前路径中被发现时有效。使用graphviz需要dot。这个文档生成工具 检查dot的版本,如果支持,还可使能客户端的图像映射。

电子科技大学硕士学位论文

-fnese-tossim-tosnodes=-n

指定在tossim环境中能够被模拟的最大节点数。 一fiaesc-cfil萨file 指定当在编译组件时生成的c代码的存放文件。如果在命令行指定了两个组 件,则由第二个组件生成的C代码将覆盖第一个的c代码。 3)ncc搜索路径 指定了.I选项的目录,nee便执行以下的置换:%T被TinyOS目录取代,%p 被所选的目标取代,%%被%取代。 4)ncc预处理符号 ncc定义了下列的预处理符号: (1)NESC设置为XYZ,x.yz是ncsC版本。 (墓)PLATFORM_target(target为所选目标的名,转为大写。) (9BOARD_boardname为每个选项-board=boardname(boardname转化为大写)
51

ncc环境变量

如果-tosdir=dir选项未使用,环境变量TOSDIR指定TinyOS的位置。 NESCPATH是冒号分隔的额外搜索11CSC组件路径表。ncc建在nescc之上,处理非 TinyOS专有的IICC功能。 6)nr.x:源代码分析 ncc的完整源代码见TinyOS目录/bin下文件ncc。源代码用深色覆盖表示,其 他分析代码不变。 第一行:
#!/usr/birgperl

,/说明这是用perl语言编写的,执行环境在指定的目录下。 第二行:
撑This file is part ofthe nesC cbmpiler.

//说明ncc只是nesC编译器的._部份。
拌Configuration

∥是配置部分。 下面定义了几个变量:
¥cygwin=”l”:

该标量变量是cygwin库的版本。标量变量可以为整数或字符串。
Sprefix=“/usr’’:

第四章nose语言及其编译器的研究与改进

该标量变量指定了前缀。 ¥exoc_prefix=”¥{pretix}”: 这是执行环境前缀。
¥TOSDIR="/cygdrivc/c/rpmsrc/BUILD/ncsc-1.1.21)”:

¥TOSDIR=SENV{”TOSDIR”)ifdefincd(¥ENV{”TOSDIR”)); 再接下来:
样Have fun wilh the arguments

,/这部分是对参数的操作。 由于篇幅问题,以下只对一些代码进行简单的说明。 .v显示编译程序的当前版本号,并显示用于运行编译和链接进程的每一阶段
的命令。

.I即一include-directory。对预处理程序而言,narfle是包含文件搜索目标主列的 该目录。该选项可以重复使用,从而加入若干个目录。该选项所指定的目录将被 首先搜索,因此可用该选项重载通常所包含的系统头文件。 子程序中局部变量的定义有两种方法:my和local。
其区别是:

my定义的变量只在该子程序中存在; 而local定义的变量不存在于主程序中,但存在于该子程序和该子程序调用的 子程序中(在PERL4中没有my)。定义时可以给其赋值,如:
my(¥scalar)=43; local(@array)=(1,2,3);

以下是程序中的几个函数的简单说明: 函数一:substr(expr,skipchars,length) 抽取字符串(或表达式生成的字符串)expr中的子串,跳过skipchars个字符, 或者说从位置skipchars开始抽取子串(第一个字符位置为O),子串长度为length, 此参数可忽略,意味着取剩下的全部字符。当此函数出现在等式左边时,expr必 须为变量或数组元素,此时其中部分子串被等式右边的值替换。 函数-":exit(retcode); 终止程序并指定返回值,如,exit(2). 函数--:join Ooin-s乜,list); 把字符串列表(数组)组合成一个长的字符串,在每两个列表元素间插入串

电子科技大学硕士学位论文

joinstro

函数四:local(¥variable); 在语句块(由大括号包围的语句集合)中定义局域变量,仅在此语句块中起作 用,对其的改变不对块外同名变量造成影响。千万不要在循环中使用,否则每次 循环都定义一个新的局域变量。 函数五:opendir(dil'vag,dimame); 打开目录,与下面几个函数合用,可查看某目录中文件列表。参数为: 1、dirvar:目录变量,与文件变量类似。 2、dimame:目录名,可为字符串或表达式。 成功返回真值,失败返回假。 注:程序中可用同名的目录变量和文件变量,根据环境确定取成分。 函数六:readdir
readdir(mydir);

赋给简单变量时,每次赋予一个文件或子目录名,对数组则赋予全部文件和 子目录名。 函数七:closedir(mydir); 关闭打开的目录。
函数八:函数grep

@foundlist=greP(pattern,@searchlist); 与同名的UNIX查找工具类似,grep函数在列表中抽取与指定模式匹配的元 素,参数pattern为欲查找的模式,返回值是匹配元素的列表。 函数九:函数map @resulflist=map(expr,@list); 此函数在Perl5中定义,可以把列表中的各个元素作为表达式expr的操作数进 行运算,其本身不改变,结果作为返回值。在表达式expr中,系统变量¥代表各 个元素。 例子: (1I)@list=(too,200,300);

@results=map(¥』l,@list);
②@re∞lts=map(&mysub(¥_),@lisO;
结果:

①(101,201,300

第四章ncsc语言及其编译器的研究与改进

②无
函数十:函数exoe(1ist);

与system类似,区别是启动新进程前结束当前程序。常与fork合用,当fork 分成两个进程后,子进程用exec启动另一个程序。启动新进程nosce,结束当前程 序ncc。
4.2.2.2

IqOSOC步骤

11CSCC也是ped脚本,主要是把unix路径转变为Windows路径,把可能在同 一个参数里的多个文件名分别提取出来。此外,还要编写好一个引导编译器编译

nesC文件的控制文件tdspe∞,并指定给specs参数。之后启动驱动程序gcc.o

4.2.2.3

gcc步骤

在这里调用avr-gee,是为了读取默认配置文件specs和指定的ncsC控制文件 tdspecs。一旦avr-gee在接收到的参数里发现有nesC文件(后缀为.no),就执行 tdspecs里的相应语句,即nese-eompile脚本。如果没有nesC文件,则不调用 nese-eompile。gee驱动程序主要是要读取配置文件specs。

命令为:gee-specs=c恻i州ib谊cc\tdspecs……
1)文件cygwiBkIibknee\tdspecs的内容: .Re:@nese
@nest:
perl—s

nese-eompile%L,)%{m+)%{D’,%{I+}%{a+}%{矿)%{o+)%{w+)

%{w)%{s}%{pedantic+)%{std+}*/,{ansi}%{traditional}%{v)%{p+)%{P) %{!fsyntax-only:%{!fnesc-cfile=+:%{l_filese-cfilo=。:?fnese-lmpctile=-%g.c),’ %{s:%w{o‘)%{!o+:-0%b.s>}%{!s:%fc:%w{o+,%{!o’:-0%w%b%o})%{fc:-o

%d%、删u%O})}%{fsyntax-only:?0%:j}%i
下一步将执行
perl—S

nese-eompile……

2)gee的specs文件一简述 gee是一个驱动程序。它通过调用一系列其他的程序来编译,汇编和连接。GCC 负责解释命令行参数,并根据这些参数来决定它该调用什么程序,并传递什么样 的命令行参数给被调用的程序。这个行为是被“spee strings”控制的。在多数情况下,

电子科技大学硕士学位论文

每个GCC能调用的程序都有一个sp∞string,但少数几个程序用多个spec

strings

来控制它们的行为。GCC中编译时内建的spec strings可以用命令行开关,_specs=’ 指定一个spec文件来覆盖。”Spec文件”是纯文本文件,用来创建spec 要找出specs文件在哪里,只要执行
”gcc-v”:-gws@tigers-lfs:~¥gce-v Rodmg
2>&1l head-n I strings.”

specs from/static/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/specs

如果你用readelf工具来检查一个普通的动态连接的二进制文件,你能确定那 个二进制文件是为哪个动态连接器(如程序解释器)而编译的。
gws@tigers—lfs:-/src¥readelf—a
foo



grep i11t髓pI试er

[Requesting pro罂.卸毗interpreter:/lib/Id-linux.80.2】

如果我们想替换二进制文件中内嵌的程序解释器,我们需要使用连接器开关 -dynamic-linker,例如:一WI,一dynamie-linker=/stagel/lib/ld-linuxrso.2.但对每个包都 这样指定有点麻烦,我们通过改变specs文件中的specs string来达到目的。
4.2.2.4

nese-oomp;Ie步骤

nese-eompile是perl脚本,为ncsC文件编译到C文件作准备。它提取出输入 的ncsC文件名、输出的C文件名以及搜索路径。把这些参数分配给nescl程序, 并执行nescl。同时,为了配合make完成自动编译功能,可以把完成标准C到特 定规则C的脚本,如prewice放在nescl之后执行。
4.2.2.5

nest]步骤

1)nescl.exe

n韶c1麒e是实际的nesC编译器,作用是把分散在各目录下的ffesC文件组装
映射成一个标准C文件。 该程序首先装入tos.h,该文件包含了基本数据类型定义和一些基本函数。

然后把需要的C文件,(如调度管理文件sched.c)、接口或组件装入到I瞄编
译器中进行编译。 在装入c文件时,首先定位C文件,再作一些预处理,展开宏定义与其中定 义的头文件。由于组件的接口函数的声明和定义映射到c语言的全局范围;所以 对于其他组件而言,其接口函数是全局可见的。装入接口时,首先要定义该接口, 然后装入该接口包含的头文件。装入组件时,首先定位组件,再递归装入该组件 使用的其他组件和相关文件。最后装入顶层配件文件。这样,就可得到希望的标

第四章ll{镕-C语言及其编译器的研究与改进

准C代码了。 2)具体步骤如下: 装入C文件:首先定位c文件,再作一些预处理,展开宏定义与其中定义的

头文件。由于组件的接口函数的声明和定义映射到c语言的全局范围,所以对于
其他组件而言,其接口函数是全局可见的。 装入接口;装入接口首先要定义该接口,然后装入该接口包含的头文件。 装入组件:首先定位组件,再递归装入该组件使用的其他组件和相关文件。 应用中用到的C文件中包含的类型、变量、函数名字在nee的处理过程中保 持不变。如果C文件出现了和ncsC的关键字相同的变量,则在编译时自动在该变 量前加上前缀ncsC_keyword_。具体对应关系如下: 模块M中变量x对应MSX; 模块M中函数F对应M¥F: 模块M中命令或者事件C对应MSC; 模块M中接口I中的命令或事件C对应M¥I¥C。
3)tos.h问题

包含哪些头文件有:
string.h stdlib.h

math.h
stddef.h ctype.h

hardware.h
dbg.h sched.c

Ident.h
unistd.h stdio.h



sys/types.h

在Blink例子里,target为mica时,被使用到的头文件有:stdlib.h、stddef.h、
hardware.h、sched.c、Ident.h。

4l

电子科技大学硕士学位论文

4.3

nesC语言编译器的移植与改进
很多时候我们选择的硬件平台TinyOS不支持,nesC语言经编译器产生的机器

码在新的平台上不能运行。就需要把nesC的编译器移植到新的硬件平台上。下面 给了一个移植的思路,同时给了一个移植实例。
4.3.1

80C51芯片介绍

在系统移植之前,必须先了解目标机的硬件资源,然后根据特定的硬件编写 相应的代码。80C51系列单片机具有结构简单,应用灵活等特点。其硬件资源如下: CPU:8位的微处理器; 内存:片内RAM(128B),片外RAM(64K8);片内ROM(4KB),片外EPROM(64KB); 时钟:片内振荡器和时钟产生电路,振荡频率为6~12M/-IZ;2个16位定时,计数器; 中断:5个中断源,两级中断;’ 外设:4个8位并行I/O接口P0~P3;1个全双工的串行I/O口(uART)。 以下为8051的中断介绍部分: 8051下控制中断的寄存器为TCON寄存器;

其中TF0与TR0用于控制计时器TO。TF0为定时器TO溢出中断标志,TF0=0 表示TO无溢出中断,TF0--1表示T0有溢出中断。TR0为定时器TO工作允许位, TR0=0表示To停止计数,TRo=1表示TO计数。在Timer中所用到的计时器为T0, 并用TR0来控制计时器TO的工作与停止。 中断使能寄存器IE:

其中: EA(m.7):全局中断控制,1允许全局中断,0禁止全局中断。 。(IE.6):保留 ET2(IE.5):定时2溢出中断充许(8052用) ES(IE.4):串行口中断充许(ES=I充许,Es:o禁止) ETl(IE.3):定时l中断充许 EXl(IE.2):外中断INTl中断充许

第四章nesC语言及其编译器的研究与改进

ET0(IE.1):定时器0中断充许 EX0(rE.O):外部中断INT0的中断允许 控制计时器工作方式的寄存器为TMOD寄存器:

其中低四位用于控制TO,高4位用于控制Tl。 GATE:定时操作开关控制位,当GATE=I时,INT0或INTl引脚为高电平, 同时TCON中的TR0或TRl控制位为1时,计时,计数器0或1才开始工作。若 GATE={),则只要将TR0或TRl控制位设为1,计时/计数器0或l就开始工作。 C/T:定时器或计数器功能的选择位。C/T=1为计数器,通过外部引脚TO或 T1输入计数脉冲。C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。 M1,M0:用于控制计时器的工作模式。 oo为方式O:13位计数,计时器。 01为方式1:16位计数/计时器。 10为方式2:8位自动加载计数/计时器。 11为方式3:定时器1停止工作,定时器0分为两个独立的8位定时器TH0 及TI.,0。


Tmaer中计时器的工作与INT0或INTl无关,因此GATE=0。用到的时钟为外 部时钟,C,r_l。工作方式为方式2,M1,M0=-10。 另外,电源控制寄存器PCON中的IDL位为空闲方式控制位,IDL=0为正常 方式,IDI.,=1为空闲方式。

PD控制掉电方式。GFl,GF0为通用标志。SMOD为波特率选择为。这些位 在Timer中没有用到。

4.3.2移植思路
对于一般编译器的移植,首先要对其编译过程进行详细分析,找出那些过程 是通用的,那些过程是针对具体的平台的。一般思路都是通用的过程不需要修改, 而具体针对不同硬件平台的经过对nesC语言编译器的分析可知,一般编译要经过 两个过程。第一步:将用nest自带的编译器将nest语言转换为c文件;第二部, 将生成的C文件经过经过GCC等编译器编译,最后生成根据目标平台生成相应的

电子科技大学硕士学位论文

代码。 因此,把TinyOS移植到其他平台上(比如基于8051指令的平台),编译器的搭 建也可以考虑采取两个步骤。第一步,用lice将nesC编译生成c文件;第二步, 将生成的c文件在keil C51交叉编译器上进行编译,生成能在基于8051指令的平 台上运行的机器代码。

…-|



I l I l





} I l }

…J
这里存在一个明显的问题,也就是第一步生成的c文件是否能够在keil

C51

交叉编译器上运行。显然,不经过修改的c文件不可能顺利的在C51交叉编译器 上运行。我们这里编写一个名为Keil PPP的一第将是perl本脚 _生步 就能功的它,

成的c文件进行处理,使得它能够在keil C51编译器上运行。同时还必须修改floe: 编译器中的一些文件。图4_3为移植的示意图,其中左边四个图为nCC编译器编译 之后生成的c文件,经过后边keil 程序。 的处理,生成了可以在 上 PPP.的行运C51
C51

4.3.3移植过程
移植过程中要修改好几个文件,限于篇幅,无法一一列出。这里只列出几个 典型文件的关键部分,说明移植过程的重点。 (1)修改ncc 所在位置AcygwinkueBlocal\binXaee 文件作用:用来匹配ncc命令后的带的几个参数。 修改内容:增加~个与keilC51的一个参数,方便自动编译。

第四章uesC语言及其编译器的研究与改进

增加代码(部分):. <¥KEILDIR=¥ENV{”KEILDIR”)ifdefined(¥ENV{”KEILDIR”));
<elsif(¥target eq”wisenet'’){
<¥gce=”avr-gcc";

<push@new_args,(“?fnese-target=keil'’,”fiaesc-keil oroj---template.uv2”,
”-fnese-keil__out=uv2.output”);

<#push@new_args,
¥KEILDIR/C51/INC”);

(”一fiaesc-target=keil”,


”-DPLATFORM

C51”,

”-I

<@commonplafforms=Cwisenet”,’'keilmote”);


<)


(2)修改nesC-compile 所在位l:\eygwin\uerklocalklibLueekuese-eompile 文件作用:调用nesel命令,实现nesC语言文件到C文件的映射,将出口C 文件传递给交叉编译器。 修改内容:将生成C代码交给keil...ppp脚本,实现C程序到C51程序之间语 法的转换。 增加代码(部分):
elsif(¥target eq”keil”){
¥asmtargetl=¥ctarget;

¥asmtargetl—sA.e¥Ls/;
¥out__target=¥ctarget; ¥out

target—sA.eS/._4_keil.e/;
Sarg(@nese__=args)(

foreaeh

if(¥arg一/A—fnese-keilproj/){
¥keil proj=Sarg;



if(¥arg一/^-fnesc-keiloutO{
¥keil_out=¥arg;



电子科技大学硕士学位论文

) &vsystem(”keilppp”,¥etarget,Sour target); print(”、11-A Keil C51一compatible
file has been

produced:Xt¥out_targetkn”);

(3)增加keil.c 文件作用:定义针对keilC51的数据类型 增加代码:
maehine_spee keil—machine;{
’'keil”, FALSE 净PCC BrrFIELD TYPE

MATTERS★f.

(2,1), {4,1), {4,1), {4,1},
{2,1),

严pointextype+/ 严float+/ 产double+/ 产longdouble?/ 严short★/
p int 4/ 严long+/’

(2,1),
{4,1),

(8,1),
1,1,1,1, 2,2,

产long long(unsupported
/宰intl/2/4/8 align}/
严wchar_t,size—t size+,

in aw-gce)+/

TRUE,TRUE,
’’avr-gcc”

p出缸、wchar

t signed’|

);

(4)增加Keil

ppp

文件作用:keil_ppp脚本文件主要完成将Dec编译器产生的C程序编译成能在
keil

C51环境下运行的C程序。具体作用表现在下面: 符号转化:注释符撑改为下划线,¥符改为下划线等; 删除一些关键字:比如Extension,inline,statie,volatifle,progmen等; 语法转化:嵌入汇编语句形式,中断表示方式等。 增加代码(部分):
¥source=¥AROV[0]; ¥output=SAROV[q;

撑入口文件 挣出口文件

第四章n∞c语言及其编译器的研究与改进

if(¥source

eq

Seutput){
cannot be the

di《”wiceppp:Source and output )

sallle”);

碱星程终止函数die
die(message);

终止程序并向STDERR输出错误信息。message可以为字符串或列表。如果 最后一个参数不包含换行符,则程序文件名和行号也被输出。,
open(SOURCE,Ssource)01"di《”wiceppp:Could not
open

80llrcae:Ssource”);

撑打开原文件

s/extension//;
s/ s/inline]/; ##A/V/;

挣去掉extension关键字 群去掉iuline关键字 撑把艘主释换为//注释 撑把¥转换为

群去掉 inline ;//eniIni.字键关

a/x¥/穗

s/wj#
sf
s/__progmem_//;

锵¥转换为。模式匹配选项g,匹配所有可能的模式。
群取出关键字attribute表达式中的属性值。
撑去掉关键字progmern.

a倒but“Ⅵ.‘)\)\)/¥1/;

s,.笋m volatile、(\”(.+ⅣX)/asm{¥1)/;舞调整嵌入汇编语言段,去掉volatile。
s/interrupt//;群去掉关键字interrupt
s/_veetor\_(.+)X(void\)/._intcall vector_¥1j(void)@Ox08:low_int
0/;

sLVectc峨(.+)、(void\)/_intcall vemor__¥1(void)@int 0/;
%hat vectors=r

INUM

D删Drr0=》0.
INUM

FLASH=>6.

EXTERNAL0=》o-

NUM
INUM

TIMERO
INTl

--2>1. ->2.

DTUM E)n卫RNALl;->2.

NUM
INUM

TEM[ERl=》3.
SERIAL0 ->4.

电子科技大学硕士学位论文

1NUM—UART0 INUM—UART0一RX

2》4, =》40,

踟M

I,ART0 TX->41,

INUM—SERIALl=>7,
INUM—UARTI INUM_UARTl RX
->7, _>70, ->71, =>8, _>9, _>10, _>100,

玳UM—UARTl一TX
INUM—RF

眦JM m偶R2
INUM_DES_ADC INUM_DES

ImnvLADC=>101,
INUM—TIMER3 INUM—RTC );
=>11,

母12

群以上是建了一个寄存器队列与其对应的矢量表 通过修改以上几个文件,便实现nesC程序到基于8051指令平台的移植。将 修改后的ncc,nesC-eompile等几个文件放入到原来的位置。在Cygwin环境下执 行以下两条命令:
ncc—fiaese-cfile=app.c—v Blink.Ilg: keil—PPP app.c C51_app.c

//① //②

①命令将以.nc为后缀的一系列ncsc文件转换为C文件app.c;②命令将app.c 文件转换为C51程序C5l
app.co

C51_app.c可以在kdl C51平台上编译通过。

4.4移植改进结果的分析
上面生成成的C51_app.c文件在keil C51平台上完全顺利编译通过,说明编译 没有语法错误。我们最后将其代码编译下载到芯片上,链接也没有错误,可见编 译器的移植修改已经成功。

第四章n∞C语言及其编译器的研究与改进

4.5本章小结
本章在介绍nesC语言的基础上,比较详细介绍nesC语言编译过程,对其编 译步骤进行详细提取,特别对预处理过程进行了详细的分析,是该领域一个非常 详细的文档,为下文移植打下基础。最后提出一套ncsC语言编译嚣的移植方案, 完成将其移植到基于80C51指令的单片机上,通过简单的实验验证移植已经顺利 通过。该移植过程是移植TinyOS操作系统的一个非常重要的步骤。

电子科技大学硕士学位论文

第五章TinyOS操作系统的改进与移植
5.1调度机制的改进
尽管TinyOS被广泛使用,并且得到了相当的认可,但这并不意味着TmyOS 能够适用于WSN的所有应用场景。事实上,在某些场合下,TinyOS并不能工作 得很好,而可能出现过载,导致任务丢失、通信吞吐量下降等。
5.1.1

Tiny0S中的过载现象

传感器网络中,节点典型的三个任务为:接收待转发的路由数据包、将接收 到的数据包转发出去、处理本地的传感数据并将其发送出去。节点上任务的多少 取决于节点处理数据的方式。如果节点只是直接把原始数据发往基站,则任务大 多数是通信路由任务;如果节点在本地采集数据并处理后才往基站发送,则本地 处理任务比较多。当节点上待处理的任务超过其处理能力时,就会发生过载。对 于前一种情况,如果节点上发送数据的频率过高或者网络节点密度过大导致通信 任务过多时,就可能发生过载;对于后者,如果本地待处理的数据量过大或者本 地任务发生频率过高,也会导致过载的发生。 另外,当节点上中断发生频率很高,导致CPU除了进行中断处理外不执行其 它任何任务时也会出现过载(也叫接收活锁)。当系统处理任务的速率低于任务发生 的频率时,任务队列(当前只能存放7个任务)很快就满了,则会导致任务的丢失。 对于本地的传感采集速率,我们可以人为调节控制,例如降低节点采样频率;但 对于通信路由任务的发生,则不太好人为干涉。这时如果发生过载,则直接导致 通信数据包吞吐量的下降。 发生这种现象的主要原因是数据包的发送和接收受制于本地任务。当本地任 务发生频率过高时j任务队列很快就满了,这时发送或接收任务可能丢失,从而 导致数据包丢失;另外,如果本地任务运行时间过长,则发送或接收数据包的任 务要等待较长时间才能得到处理,从而降低通信速率。

第五章TmyOS操作系统的改进与移植

5.1.2对TinyOS内核调度策略的改进
从前文所述可知,TinyOS简单的队列调度策略在某些场合会导致过载、任务 丢失、数据包吞吐量降低等。另外,TinyOS只搭建了基本的调度框架,它只实现 了软实时,而无法满足硬实时,这对嵌入式系统的可靠性会产生影响。同时,由 于采用单任务内核,吞吐量和处理器利用率并不高,因此有可能需要设计多任务 系统。


为保证系统的实时性,多采用基于优先级的可抢占式任务调度策略。依赖于 应用需求,出现了许多基于优先级的多任务的调度算法研究。把TinyOS扩展成多 任务的调度,有利于提高了系统的响应速度。下面介绍几种典型的改进策略: (1)基于优先级的任务调度。每个任务根据其重要程度不同,被赋予一定的优先级。 这种调度策略总是让处于就绪态的、优先级最高的任务先运行,但何时高优先级 任务掌握CPU的使用权,。由所用内核决定。例如,可以把数据包收发和加解密任 务设置成高优先级,当它们就绪时,插入在任务队列头部。当任务队列满时,低 优先级任务被丢弃。每个任务提交之前先进行优先级判断,将任务提交在合适的 位置,保持任务队列是一个优先级递减的队列,这样最先得到执行的就是优先级 最高的任务。 (2)基于时限的任务调度(EDF)。每个实时任务都有一个截止时间,任务的优先级 根据。任务的截止时间确定。任务的绝对截止时间越近,任务的优先级越高;任

务的绝对截止时间越远,则优先级越低。当有新的任务处于就绪态时,任务的优
先级就可能需要进行调整。所以,这实质上是一种动态调度方法。 (3)基于时限的优先级调度,它是上述两种方法的结合。高优先级任务先运行,当 任务的优先级相同时,由任务的时限来决定哪个任务先执行。 在实际应用系统设计中,应该根据具体情况分析比较,可以选择合适的改进 策略对其进行改进。

5.1.3基于优先级任务调度算法
前面说过,本地处理任务较多时,数据包接收可能被延迟从而导致通信性能 下降。这在以下场合最常见i数据在本地节点汇聚,经过各种处理后再往基站发 送。如果数据包接收处理任务放在任务队列队尾,那么只有等到前面的任务都 执行完后,才能处理数据接收任务,这样必然影响数据包的吞吐量。为此,如果

电子科技大学硕士学位论文

数据接收处理的任务入队列时,将其放在队列的队首,即下一个即将执行的任务, 则可能会改善通信状况。实现方法是将原来简单的FIFO调度算法改为基于优先级 的FIFO调度。具体来说,就是给每个任务分配一个优先级,如果没有特别指明, 默认为0。不同于实时操作系统uCOSH,这里的优先级参数数值越大,任务的优 先级越高,且任务之间可以有相同的优先级。对任务入队列函数稍作修改,即增 加一个优先级参数。从队列尾到队列头,任务的优先级依次上升。如果高优先级 的任务入队列前,队列已满,则这时队列尾的低优先级任务将丢失。 原来TinyOS的数据结构如下:
typedefstruet



void(+劬();
}sched_entry;
volatile sched_entry byte sche,d_full; volatile byte sched free;

TOSH_queue[TOSH_MAX_TASKS]; ∥首指针处在所在任务队列的下标 //尾指针处在所在任务队列的下标
flee

任务队列的最大任务数为8个,任务队列初始化时,sched full和sched

都初始化为0(没有任何任务),以sched矗m为下标的队列项指向将要执行的任务,
而以sched free为下标的队列项指向下一个进入任务队列的任务将要存放的位置。

现在对原来的数据结构作修改如下:
typedefstruct


void(+tp)();
int priority; entry;

)sched

这里的优先级参数埘ority数值越大,任务的优先级越高,且任务之间可以有
相同的优先级。 原来的入队函数是;
TOS

post(struct en缸y+pentry)

sched

{ 直接放入队末; )
52

墨至兰塑兰塑堡墨竺塑堕鲞皇整垫
修改后的入队函数为:
TOS_post(stmet sched entry+pentry)

( 根据优先级选择在队列中的位置: 当队列满时,删除队末任务: , 原来的入队函数仅仅将任务放入队末,这样的话当队列已满时,比较紧急的任 务等在队列的末尾无法进入队列,容易丢失。修改后保证队列始终是优先级高的 任务放在队首,优先级低的任务放在队末。这样的话即使队列满,来了新的优先 级比较高的任务的话,可以将队列末尾的任务删除掉,保证高优先级高的任务进 队得到执行。任务执行效率就大大提高了。

5.1.4对调度算法实验的验证
接下来的实验是为了验证节点本地任务执行时间对网络吞吐量的影响。 实验1提高数据包发送的吞吐量 实验建立过程:有两个节点,一个负责发送数据包,另一个负责接收数据包。 发送节点的发送频率为8Hz,同时它还有一个周期性的本地任务,其发生频率也为 8Hz。接收节点对所收到的数据包进行计数。实验图如5.1所示。

图5-1提高发送节点实验图

实验中改变本地任务的运行时间,由图5-2可看出,采用基于优先级的调度策 略后,发送节点的吞吐量大大提高。 得到的结果如图5-2所示,当本地任务执行时间达到35ms以上时,普通队列 调度算法的发包率仅为1个/秒,而基于优先级调度的FIFS调度算法,依然可以达 到7个∥眇。由此可见,基于优先级调度的队列调度算法在节点本地任务执行时间 比较长的情况下,依然能获得不错的网络吞吐量。

电子科技大学硕士学位论文




坩Oi
0 7 14 21 28 35 42 49

本地任务的执行时间

图5—2任务执行时间对发送包的影响

实验2提高数据包接收的吞吐量 任务建立过程如下:两个节点,一个负责发送数据包,另一个负责接收数据 包。发送节点的发送频率为8Hz,接收方除了数据包的接收外,还有一个周期性的 本地任务,其发生频率也为8Hz。实验图如5.3所示:


图5-3提高发送节点实验图

实验中改变接收节点本地任务的运行时间,可看出采用基于优先级的调度策 略后接收吞吐量大大提高,如图5.4所示。


籁8 七7 名6 司5 搿4 辎3

叁2 坩1


图5—4任务执行时间对接收包的影响

由上述两个实验可知j引入基于优先级调度策略后,通信的吞吐量比没有采 用优先级的调度策略显著改善。

第五章TinyOS操作系统的改进与移植

5.2移植思路
TmyOS本身仅仅支持少数平台,当遇到新的平台上时,系统本身就不支持, 必须将其移植到新的芯片平台上,满足项日的需要和系统的正常运行。因此了解 TinyOS的移植就显的特别重要。 TinyOS的应用运行环境一般有以下几部分实现:Main组件(调度程序),一个可 选择的系统组件集合(仅仅是应用需要的组件)以及为应用定义的系统组件,硬件抽 象层和节点硬件。"1]nyOS的组件的层次结构如图5-5所示。

图5—5 Tiny0S组件图

TinyOS的这种体系结构使得用户可以快速便利地实现应用。用户不需要关心 HPL层的具体实现细节和节点硬件所提供的功能,只需要使用系统组件层提供的 服务来满足具体的应用需求。硬件描述层的独立抽象,增强了TinyOS的移植性。 通过硬件抽象层对硬件平台合理的描述,可使操作系统内核基本和具体的硬件无 关,从而容易地实现不同平台间的移植,这样就简化了嵌入式OS内核的移植工作, 进而说明了TinyOS可以更好的满足传感器网络节点硬件的变化。 在TinyOS中应用程序如何使用物理硬件并没有严格的规定或者约束,因此开 发人员可以依照自己的硬件彻底改造或者重新组织硬件描述抽象层。TinyOS最初 是为Atmcl家族的微控制器设计的,它的硬件抽象描述层只是体现了特定的Aanel 硬件能力,而不是对无线传感器网络应用需求的高效抽象。 在硬件抽象描述层组件的设计通常遵循以下原则。 第一,依据TinyOS现有的原则,硬件描述层(HPL)组件通过微控制器的寄存 器直接控制硬件。硬件描述层每个TinyOS函数映射到硬件的寄存器和中断。 第二,硬件描述层上层的组件展现底层硬件的全部功能、维护执行通用操作 的一些状态。在这一层的组件提供更多适合应用的抽象以及执行_些更高层服务 之闻的仲裁。

电子科技大学硕士学位论文

第三,通常为了向下兼容己经存在的TinyOS的硬件API,需要开发额外的包 装组件,它们向下转换底层组件的功能到传统的TinyOS接口。通过以上对硬件描 述层的设计原则,可以充分发挥微控制器为应用提供的丰富的功能,同时兼容包 装保证了己经存在的TinyOS应用程序不需要任何修改就可以运行在新的平台上。 TmyOS这种体系结构使得开发入员可以方便地将其移植到其他微控制器上, 我们只需要修改硬件描述层的组件,使得其可以对微控制器上的相应工作寄存器 进行操作。

5.3移植过程
TinyOS移植首先要针对目标芯片的功能重新定义硬件描述层的组件,通常包 括HPLUART组件、HPLTimer组件、HPLPowerManagement组件和HPLADC组件、, 同时还需要修改头文件hardware.h,该文件中包含微控制器管脚的连接信息说明、 控制管脚的输入输出状态信息等。 Timer组件由TimerC配件和TimerM模块组成。TimerC配件提供了Timer接 口与StdControl接口,并定义了它们的连接关系以及TimerM中各接口的连接关系。 TimerC提供的StdControl接口与TimerM的StdControl接口关联,TimerC提供的 Timer接口与TimerM的Timer接口关联。TimerM模块中的Leds接口调用NoLcds

模块的kds接口。TimerM的Clock接口调用ClockC配件的Clock接口,该接口
直接与HPLClock模块的Clock接口关联,实现设置时钟计数器,调整时钟计数器 等功能。TimerM的PowerManagement接口与HPLPowerManagementM模块的 PowerManagement接口相关联,实现电源管理。其图示关系如图5-6所示j 可见,8051下所修改的组建主要为HPLClock组件,HPLPowerManagemM组 件和TimerM组件。以下我们分别通过这几个模块的创建来创建基于80C51指令 的硬件描述层。

第五章协yos操作系统的改进与移植

图5.6组件关系图
5.3.1

HPLCIock模块

8051下的HPLCIock模块提供的接口、函数与变量不变。修改部分为函数的
具体实现。

接口提供如下;
modulo HPLCIock‘
provides interface Clock;

pm、,id舒mta'face StdControl;



变量定义如下;
u/nt3 t set_flag;

电子科技大学硕士学位论文

uintS_t re_scale,nextScale,mintcrval;

set_flag用于标识下一次时钟嘀嗒的修改,mscale与nextScale保留但不对硬件 进行操作。Minterval记录时钟嘀嗒数。一个时钟嘀嗒为计时器加1所经过的时间 间隔。当使用内部时钟时,一个时钟嘀嗒为CPU时钟经12分频后产生的时间间 隔。当使用外部时钟时,一个时钟嘀嗒为外部时钟的一次震荡时问间隔,一般为
lms。

接口StdContlol提供的函数包括:
command result


StdContr01.initO

command result_t StdContr01.startO command result_t StdContr01.stopO

其中:
command result._t StdContr01.init0

该函数用于初始化mscale与minterval变量。Mscale初始化为3,minterval初 始化为255,即每255个时间嘀嗒产生一次时钟中断。 command result_t StdContr01.start0 该函数以minterval值设置时钟嘀嗒并启动计时器TO,使计时器每隔相应时间 嘀嗒产生一次时钟中断。

command result_t StdContr01.smp0

该函数停止计时器TO工作。这通过设置TR0=0来实现。 接口Clock提供的函数包括:
async

command void Clock.sctInterval(uint8_t valuO
command uintS_t Clock.getInterval0 command
uintS__t

command void Clock.setNextInte/“cal(uim8j value)
async async

Clock.getScMeO

async command void async command async async

Clock.setNextScale(uintS_t scale) Clock.setIntervalAndScale(uint8_t
interval,uint8._t

result_t

command uintS_t Clock.readCounter0
Clock.intDisableO
58

scale)

command void Clock.setCounter(uint8_t m

async command void

苎至童墅!坦!塑堡墨堕竺堕垄兰整堕
async

command void ClocLintEnable0

asyne

command result_t Clock.setRate(char

interval,char

scale)

default asyne event result t

Clock.矗如

其中:
async



comm姐d void Clock.sctIntcxval(uintS_t Valu曲

该函数将TL0的值加上(interval.valuo),其中临时变量interval为当前的时间 间隔。并将THO设为Oxff-value+l。以使剩余时钟嘀嗒数发生相应变化,并使下次 计时的时间隔变为所设置的value值。

command void ClocLsetNextInterval(uint8_t Valu曲

该函数将minterval设为value值,并将set_flag设为1,以便中断处理函数做 相应处理。它只影响下次的计时嘀嗒数,不影响当前计时。

async

command uint8



Clock.getInterval0

该函数根据TH0的值计算出时间间隔并将其返回,其值为Oxff-(THO)+l。

async command uints_t

Clock.getScaleO

该函数返回当前的rescale值。

asyne

conmaand void Clock.setNextScale(uintS_t scale)

该函数将nextScale设为参数scale值,并将sot_flag设为l,以便在中断处理 函数中做相应处理。由于参数只涉及分频系数,因此在8051下不会对硬件产生影
响。

缸ync command result_t Clock.setIntervalAndScale(uintS_t interval,uint8_t scale)

该函数将minterval设为参数interval值,将mscale设为参数scale值。TLO 和THO都设为Oxff-valuc+l并启动计时器。

asyne

command uiats_t ClocLreadCountar0

该函数返回计数器从初值到当前值所经过的嘀嗒数。

asyne

command void Clock.setCounter(uint8_t n)
59

电子科技大学硕士学位论文

该函数将计数器设为初值加上参数n的值,使计数器从新的值开始计数。

async

command void Clock.intDisable0

该函数关闭TO中断使能,使TO无法产生中断。

async

command void Clock.intEnable0

该函数打开TO中断使能,使TO可以产生中断。

async command result_t

Clock.setRate(char interval,char scale)

该函数根据参数interval来设置计时器T0,使TL0=TH0=0xff-value+l,并启 动计时器TO。且将TO设为外部时钟触发。

default async event result__t

Clock.rite0

事件处理函数,返回SUCCESS。

void

intert00

interrupt l

中断处理函数,根据set flag值判断是否调整时钟嘀嗒以及mscale值,若

set_flag=l则调整,否则不调整。最后,触发Clock.fi哟事件。
5.3.2

PowerManagementM模块

8051下的HPLPowerManagementM模块提供一个接口PowerManagement与四 个命令函数:Enable0、Disable0、PowerSleep0与PowerWake0,其中函数EnableO 与Disable0为8051下的AVR平台保留函数,PowerSleePO-与PowerWakeO为8051 下的新增函数。接口定义如下:
module

HPLPowerManagementM{

provides.{
interface

PoworManagel】nent;

command result._t Enable0;

command result._t Disable0;
command resultt PowerSleep0;
command result_t

PowerWake0;

——一.
} )

蔓至童塑兰塑堡墨竺堕堕堂皇鳌垫

接口PowerManagement提供的函数如下:
asyac command uintS,t async asyne a¥ync

PowerManagement.adjusWowerO

command

result_t PowerManagement,enable0

command result_t PowerManagement.disableO command uint¥_t PowerManagement.powerSleep 0

asyne command uints_t

PowerManagement.powerWake 0

其中,
asyac asyne async

command uint8_t PowerManagement.adjustPower0 command rcsult_t PowcrManagemcnLenable0 command result__t PowerManagement.disable0

为8051下的AVR平台保留函数,其实现均为返回SUCCESS。
command uintS_t PowerManagemcnt.powerSleep 0 command uint8


asyne async

PowerManagement.powerWake 0

为8051新增函数。
async

command uintz



PowerManagement.powerSleep 0

该函数通过设置Dk田,使单片机进入空闲状态。
async

command uint8



PowerManagement.powerWake 0

该函数通过设置IDL=I,使单片机进入工作状态。 命令
command result_t Erlal,zeO;
command result_t DisableO;

为8051下的AVR平台保留函数,其实现均为返回SUCCESS。 command reaflt_t PowerSleepO
command result_t PowerWake0

为8051新增函数:
6l

电子科技大学硕士学位论文

command reslllt_t PowerSlccp0 调用PowcrManagemcnt.powcrSlecp 0, 使单片机进入空闲状态。
command result_t

PowcrWake0

调用PowerManagemeat.powerWake 0, 使单片机进入工作状态。
5.3.3

TimerM组件

首先根据NesC语法编写出模块要提供和使用的接口:
module TimcrM{
provides interface Timer:


provides interface StdControl:

uses{
interface Leds;

interface Clock;

) ) 模块的StdControl接口初始化命令:
command result_t

StdContr01.init0{

调用Clock.serrate0函数,并以此函数的返回值作为StdControl接口初始化命 令的返回值; ) 模块的StdControl接口启动命令:
command result_t

StdContr01.start0<

return SUCCESS;



模块的StdControl接口停止命令:
command r鼯mt_t StdContr01.stopO{



Timer接口的开始命令,调用此命令来开始某个Timer实例:

第五章啊myOS操作系统的改进与移植

command rcsult_t T'tmcr.stan[uint8_t id](char type,
uint32_t intccval)

Timer接口的停止命令,调用此命令来停止某个Timer实例:
command result_t Timcr.stop[uint8


id]0{


5.3.4

UARTM模块

这个模块中接口名字为h'PLUARTM。有一下几个命令和事件: 命令与事件1:UART初始化,用来进行URAT的初始化 command result


UART.init0

命令与事件2:传输结束,UART结束命令
command result_t UART.stop0

命令与事件3:获取数据,获取数据的命令
event result t

UART.getO

命令与事件4:传输数据结束,
event result__t

UART.putDoneO

命令与事件5:传输数据 command
5.3.5
result_t

UART.put(uintS_t adata);

HPLADC组件

这一组件有以下命令和事件组成: 11初始化命令
command

result_tADC.initO{
SINGLE

halConfigADC(ADC_MODE



ADC_INTERRUPT_ENABLE

ADC_REFERENCE_VDD,CLK_FREQ,o);

ADC_POWER(TRUE);
rcturll SUCCESS;



∞设置采样频率命令 command result._tADC.setSamplingRate(uint8_t rate){
return SUCCESS;

电子科技大学硕士学位论文

) 31采样停止命令
command result_t

ADC.sampleStop0{
enabled,just power offthe ADC

//Leave the inte】n'upts //INT //INT

ENABLE(1NUM_ADC,turf_OFF);
ENABLE(INUM_DES ADC,INT_OFF);

ADC

POWER(FALSE);

rc:tul'n SUCCESS;

) 钔重新采样命令
command msdtA ADC.sampleAgainO(

ADC__sAMPLE_SINGLEO;
return SUCCESS;

) 5)绑定采样端口命令
command result
,幸



ADC.bindPort(uint8_t port,uint8



adePort){

ifooft<TOSH_ADC_PORTMAPSIZE)


init_portmap0;
TOSH

ade_portmap[port]=adePort;

return SUCCESS;



else
ret'lllTI FAIL; ●/ l"etunl SUCCESS;

l 61采样事件.
default event result_tADC.datageady(uintl6-t

done){return SUCCESS;}

TOSH_INTERRUPT(int_ADC,INUM DES_ADC){
uintl6一t

ad—data=ADC_GET_SAMPLE_10BIT0;
64

第五章TinyOS操作系统的改进与移植

INT_SETFLAG(INUM
IN.T

DES ADC,INT

CLR);

SETFLAG(INUM ADC,mrr CLR);

signal ADC.dataReady(ad_data);

5。4本章小节
本章对TinyOS调度机制存在的一些问题进行讨论的基础上,对其调度机制进 行改进,提出几套改进方案,并通过一种改进方案进行实验验证。紧接着通过对 TinyOS可移植性分析的基础上,提出了一套将其移植到其他平台的方案,通过修 改HPLClock模块,PowerManage模块,TimerM组件,UARTM组件,HPLADC组
件,实现了将TinyOS移植到基于80C51指令的单片机上。

电子科技大学硕士学位论文

第六章总结与展望

本课题所涉及的内容为电予科技大学软件工程研究中心”基于IPV6无线传感 器网络节点”项目(国家发改委下一代互联网示范性项目),我们项目组主要完成软 件开发与设计方面。目前项目基本已经完成,2007年7月份参加国家验收。 本文以无线传感器网络设计要求为依据,在软件设计方面进行深入的研究。 文章在分析无线传感器网络和其节点的基础上,主要分析了无线传感器网络节点 操作系统TmyOS的组件模型、通信模型、能量管理制、事件驱动机制、调度策略 和编程语言等方面;接着重点分析nesC语言的编译过程,完成nest语言和TinyOS 的移植;同时完成了TinyOS调度机制的一些改进。 本课题的主要工作和创新点: (1)对nesC语言编译过程进行详细分析,提炼出其编译步骤,特别对nee预编 译过程进行详细分析,同时完成nesC语言编译器的移植。 (2)提出一套TinyOS的移植到新平台的方案,完成TinyOS在基于80C51指 令单片机上的移植,对将TinyOS移植到其他平台有很好的参考意义。 (3)针对TinyOS的调度算法存在的问题,提出几种调度算法,提出了基于优先 级调度的调度算法,通过改算法对TinyOS进行改进,大大提高了吞吐率。 针对TinyOS的调度机制存在的问题还可以采取其他策略进行改进,可以进一 步提高吞吐率和工作效率。同时在新的平台上,根据新的应用,可以增加新的模 块进行扩充,完善功能。 由于实验条件和项目进度等原因,有些工作没有得到充分的进行。但是我相 信,随着对无线网络传感器系统的研究将不断深入,相应的理论和应用也将不断 完善。在不远的将来,无线网络传感器将真正的像“motes”一样普遍存在在我们
的周围。

致谢

致谢

在本论文即将完成之际,谨此向我的导师汪文勇教授致以衷心的感谢和崇高 的敬意!本论文的工作是在汪老师的悉心指导下完成的。汪老师以他敏锐的洞察 力、渊博的知识、严谨的治学态度、精益求精的工作作风和对科学的献身精神给 我留下了刻骨铭心的印象,这些使我受益匪浅,并将成为我终身献身科学事业的 动力。在攻读硕士的这三年里,导师不仅为我创造了优越的科研和学习环境,使 我得以在计算机科学领域中自由翱翔,同时在思想、人生态度和意志品质等方面 给予了我谆谆教诲,这些教益必将激励着我在今后的人生道路上奋勇向前。向汪 老师表示致谢! 此外,我还要感谢一起从事科研工作的老师,他们是向渝博士,张俊老师; 还要感谢项目组的同学,他们是张东波、潘家根、周开庆、辛小松、洪玲、张杉 等。他们总是在我最需要的时候给予我无私的帮助与关心。十分怀念我们一起在 实验室度过的日日夜夜。


最后,将最深切的谢意献给我的父母和家人,是他们的爱使我能有今天,无 论什么时候,我都能从这份爱中得到勇往直前的勇气和动力。虽然他们不在我身 边,但是他们的关心、爱护、鼓励和支持永远陪伴着我。在此,我祝福他们永远 安康幸福! 感谢曾经教育和帮助过我的所有老师和同学,感谢所有帮助过我的朋友。 最后衷心地感谢为评阅本论文而付出宝贵时间和辛勤劳动的专家、教授们l

电子*42大学硕士学位论文

参考文献

【l】David Gay,Phil Levis,Rob
Language:A Design and

yon

Behren,Matt Welsh,Eric Bre~ver,and David Curler.The
to

nesC

Holisticach

Networked Systems,Proceedings ofProgramming Language

Implementation(PLDI)2003,June2003. SoftwareArchitectureSupportingNetworkedMastersthesis.December2000.

【2】JasonHill,A

【3】DARPA Program,http://dtsn.darpa.miUixo/programs.asp. 【4】Center for Emlmdded Networked Sensing,http:/1www.cens.uela.edu/. 【5】5 LF.Akyildiz,w.Su,Y Sankarasubmmaniam,E.Cayirci.Wireless
ComputerNetworks,V01.38,2002:393-422.
seaiBor

network:a survey.

【6】EstrinD.,GovindanR.,HeidemannJ.,Kumar S.Nextcenturychallenges:Scalable
sensor

coordinatein

network.In Proc.ofthe

5th ACM/IEEE International Conference On Mobile Computing

and

Networking,1999,pp:263-270.
Rose,A.Sheth B.Shucker,J.Deng.and R Hart. NeTworks of In-Situ自enso”.In

【7】H.Abrach,S.Bhatti,J.Carlson,H.Dai,Jj MANTIS:sy8tem
2003. supportfor

MultimodAl

Proe.WSNA'03.

【8】UC Berkeley.TinyOS:an o】pen-s01Jr∞operating
networks.http://www.tinyos.ne以

system designed

for wireless

embedded

Sel墟017

【9】Adam Dunkels,Bjl5m
Operating System.

C-"tsnvall,and Thiemo

Voigt.Contiki?a“曲细啦皿and

Flexible

[10】Buonadenna,P,J.Hill,and

D.Culler.Active Message Communication for T'my Networked

Sensors.Technical,University ofCalifornia,Berkeley,CA,/uly 2000.

【11】E I.zvis,S.Madden,D.Gay,J.Polastre,1L Szewczyk,A.Woo,E.Brewer,and D.Culler,’’1k
emergence of networking abs仃actions and techniques in tinyos,”in First USENDUACM Symposium
0n

Network Systems Design and

Implementation(NSDI).2004.
Wireless Networks:A Unified

【12】hap://webs.岛.barkeley.edu/tos/tinyos—1.x/duc/tinysec.pdf. 【13】Kaveh
Pahlavan,Prashant KrislLrlamur,the Principles of

Approach.

【14】William

StaUings Cryptography

and Network

Security:Principles and Pratice Second Edition.

[15】JeffreyWheat,DesigningaWirelessNetwork..
68

参考文献

[16】马祖长,孙怡宁,梅涛.无线传感器网络综述通讯学报,2004,V01.25(No.4):114?124.
【17】王万里.支持无线网络传感器的超微型操作系统ZUOS的研究与应用:【中国优秀博硕士学

位论文mt州:浙江大学.2005.E18五5.
【18】李晶,王福豹等.无线传感器网络中TinyOS的研究.智能仪表与仪器,2006.14(6):838-840. [19】孙雨耕,张静,孙永进等.无线自组织传感器网络.传感器技术学报,2004,17(2):331-335,348. 【20】马祖长,孙怡宁,梅涛.无线传感器网络综述,通讯学报.2004,25(4):114-124. 【21】任丰原,黄海宁,林闯.无线传感器网络.软件学报.2003,1412】:1148?1157一 [221陈喜贞,王书茂,徐勇军.无线传感器网络操作系统调度策略研究.中国科技论文在线.2005 [23】孙利民,李建中等.无线传感器网络.北京:清华大学.2005.356-358. 【24】黄涛,徐宏吉等.嵌入式实时操作系统移植技术的分析与应用.计算机应用,2003,9:88-90. [25】白智国,王芳,冯丹.嵌入式系统移植问题的研究.计算机工程与科学.2005,27(6):97-99.
[25】PisterKHoMtB,Jeong J’Doherty L,VainioJPIvy-Asensornetworkinfrastrn,ct'ure.2003.

【26】L.Hester,Y‰g,O.Andric,A.Alien,EChert.ASelf-OriganizingWirelessNstwork
ComputerCommunications andNetworks,IEEE,2002,364-369.

[27】Center for EmbeddedNetworked SensingJattp://www.cens.ud&edu/. 【28】Inn
E Akyildiz.SENSOR

NETWORKS.Broadband&Wireless Networking Laboratory.School
Engineering Oeorgia Institute ofTechnology.

ofElectrical

and Computer

【29]DemirbasM,AroraA,MittalV,Kulathumani V.Design andAnalysisofaFastLocalClustering
Service for

Wirbless Conference

Sensor

Networks.

Broadband

Networks,2004.Proceedings-First

International

on,Oct 25-29.2004.P700-709.

[30】htlp:llwww,tinyos.net. 【3 l】崔莉,鞠海玲,蓖勇等.无线传感器网络研究进展.计算机研究与发展;2005,42(i). (32】Edward O
Thorp.The Invention ofthe First Wearable Computer.In:The Second
oil

international

Symposium

wearable

Computer.Pittsburgh Pantlsylvania,USA.1998:19.

【33】陈丹,郑增威,李际军.无线传感器网络研究综述.计算机测量与控制.2004,12(8):701704 【34】石军锋,钟先信等.无线传感器网络结构及特点分析.重庆大学学报(自然科学版).2005,
28(2):1618.

【35】景博,张韵,张宗麟等.分布式无线传感器网络及其应用核心技术研究.测试与技术学报
.2005,19(2):181185. 【36]SensorWebs.http://semorwetm.jpl.nasa.gov/.

【37】于海滨,曾鹏.分布式无线传感器网络协议研究.通信学报,2004,25(10):i02—1
【38]So.aM K Gao J,Ailawadhi V,Pottie G J.Protoenl for self-organization of
69 a

10.
sbM2sor

wireless

电子科技大学硕士学位论文

network.IEEE Personal Communications,October 2000。16-27.

[39】Boulis凡Han





Sdvastava



B.Design and implementation of

a肋mework

for efficient

and programmable SailSOf netwo呔s.MobiSys,May 2003.

[40】Y Wei,J Heidemann,D

Estrin.An Energy 2002

Efficient MAC

Protocol for

Wireless Sensor

Networks.Proc.INFOCOM 【41】IEEE802.15A:W-treleas

juno

2002.

Medium

Accxas

Control(MAC)and

Physical

Layer(PHV)

SpecificationsforLow-RateWireless‰onalAreaNetworks(LR-WPANs).2003.
【42】Jamidon
K,Balakrishnan H,Tay Y C.SIR:.A

MAC

protocol for

event-driven wirleas

sellsor

networks.M玎-LCS-TR-894.2003.

[43】于宏毅,肖秀明.无线移动自组织网,北京:人民邮电出版社,2005.
[44】Subramonian Venkita,Huang Huang-Ming,Datar seema.Priority
study,2003. Scheduling in TinyOS:A Case

【45】lason

Hill,Robert Szcwezyk,David Architectural Support

E.Culler.System
for

arehiteetttre directions for networked Languages and Operating

senso璐.

Programming

systems,2004,93-104.

湖Philip

Buormdenna,Jason

Hill,and David Culler.Active message communicaion for tiny

networked¥enSOf8.2003. [47】Toussaint GThe
relative neighborhood graph of


finite

planar

set.Pattern Recognition,

1998,12(4):261—268. [48】TsengYCChangYN,TzengBH.Enefgy≈蚯ci∞topologycontrolforwireless
networks.Journal ofInformation Science and Engineering,2004,20(1):27-37.
acthoc 8elLgOr

【49】Jaromczyk



W,Toussiant

G T.Relative neighborhood graphs and their relatives.Proc.IEEE,

2002,80(9):152-157.

[50】W.Heinzehnan,A.Chandrakasan,H.Balakrishnsn-Anapplication speci.c
wireless 660.670.

protocol architecture for

microsensor networka(C】.IEEE

Transactions

OIl

Wireless Networking 1(4){2002)

攻硕期间取得的研究成果

攻硕期间取得的研究成果 一、参加的科研项目
[i]IPv6无线传感器网络节点.项目背景:电子科技大学软件工程研究中心. [2]嵌入式系统(8051)分析测试平台E-conner.项目背景:电子科技大学软件工 程研究中心.

二、发表的论文
[1]赵建华,汪文勇.uCOS—II内核在80C51系列单片机上的移植.计算机工程与设 计,2007,28(9):2096—2099.

无线传感器网络节点嵌入式操作系统的研究与应用
作者: 学位授予单位: 赵建华 电子科技大学

本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1082951.aspx


相关文章:
无线传感器网络节点操作系统研究.pdf
无线传感器网络节点操作系统研究 - 无线传感器网络是一种全新的信息获取和处理技术,能够实时监测、感知和采集各种环境或监测对象的信息,而网络节点上的嵌入式操作系统...
事件驱动的无线传感器网络嵌入式操作系统研究.pdf
事件驱动的无线传感器网络嵌入式操作系统研究 - 相比于一般的嵌入式系统,无线传感器网络节点操作系统的能量利用率、实时性和多任务并发等方面提出了更高的要求,针对...
无线传感器网络节点设计的研究_图文.ppt
无线传感器网络节点设计的研究_信息与通信_工程科技_专业资料。无线传感器网络概述...处理器模块(CPU、存储器、嵌入式操作系统等):负责控制整个传 感器节点的操作,...
无线传感器网络研究与应用_图文.ppt
? 我国也开展了这一领域的研究工作:无线传感器结点的 硬件设计、操作系统网络...通过嵌入式系统对信息进行智能处理,并通过随机 自组织无线通信网络以多跳中继方式...
面向环境监测的无线传感器网络节点的分析与设计_图文.pdf
应用于井下的无线传感器网络节点分为两种: 普通的传感器节点和汇聚节点[ 3 ]。...的软件系统包括嵌入式操作系统、 通信协议两个部 分组成, 可归纳为面向系统层...
嵌入式无线传感器网络节点设计与通信研究_图文.pdf
嵌入式无线传感器网络节点设计与通信研究 - 第 48 卷第 5 期 2008年9
无线传感器网络节点操作系统-Tinyos综述_图文.pdf
SensorNetworks 【摘 要】无线传感器网络作为计算,通信和传感器三项技术结合的产物,是一种全新的信息获取和处理技术而 网络节点上的嵌入式操作系统是大多数应用基础。...
无线传感器网络节点上操作系统的移植_图文.pdf
随着无线传感器网络广泛应用.节点构成的 变化是巨大的。因此无线传感器网络节点上的嵌入 式操作系统必须具备好的移植性。与通用的操作系 统相比,嵌入式操作系统具有...
基于嵌入式系统的无线传感器网络的应用研究.doc
16 1 基于嵌入式系统的无线传感器网络应用研究 1.设计要求无线传感器网络是集成了传感器、嵌入式系统、网络和无线通信四大技术而形 成的一种全新的信息获取和处理...
无线传感器网络节点操作系统的移植.pdf
无线传感器网络节点操作系统的移植 - 重点研究了无线传感器网络(wsNs)中的嵌入式操作系统TinyOS,包括其事件驱动机制、调度策略和能量管理机制等.在深入研究基于组件...
无线传感器网络操作系统TinyOS研究_图文.pdf
无线传感器网络操作系统TinyOS研究_工学_高等教育_教育专区。关于无线传感器操作系统TinyOS的相关资料 66 计算机与数字工程 第 35卷 无线传感器网络操作...
无线传感器网络操作系统现状分析_图文.pdf
3无线传感器网络节点的操作系统设计 要求通过以上分析我们认为,设计无线传感器...网络微型操作系统,它是一个支持无线传感器网络陕速构建的多线程嵌入式操作系统...
无线传感器网络节点操作系统研究_论文.pdf
无线传感器网络节点操作系统研究 - 无线传感器网络是一种全新的信息获取和处理技术,能够实时监测、感知和采集各种环境或监测对象的信息,而网络节点上的嵌入式操作系统...
面向无线传感器网络应用的嵌入式操作系统综述_论文.pdf
面向无线传感器网络应用的嵌入式操作系统综述 - 相比一般的嵌入式系统,无线传感器网络节点操作系统的体积大小能量利用率节点相互间通信以及可重配置可靠性和...
一种无线传感器网络节点操作系统设计.pdf
一种无线传感器网络节点操作系统设计 - 无线传感器网络节点操作系统是无线传感器网络的控制核心,与传统的嵌入式操作系统相比有着很大的不同,阐述了无线传感器网络的特点...
无线传感器网络节点操作系统的移植_图文.pdf
无线传感器网络节点操作系统的移植_工学_高等教育_教育专区。无线传感器网络 ...重点研究 了无线传 感器网络 ( N ) WS s中的嵌入式操 作系统 T y S包...
无线传感器网络在冰川环境监测中的应用研究_图文.pdf
无线传感器网络在冰川环境监测中的应用研究 - 冰川作为淡水库存资源气候指示器, 对其观测手段的改进非常重要. 集成了传感器、嵌入式操作系统无线网络技术的无线...
无线传感器网络操作系统TinyOS的研究(精).doc
无线传感器网络操作系统TinyOS的研究(精)_职高对口_职业教育_教育专区。无线...任务嵌入式操作系统,其主 要职责就是确保传感器网络节点中各项任务的调度和顺利...
面向无线传感器网络的操作系统组件化设计_图文.pdf
际上关注的研究热点问题,它综合了嵌入式技术,传感器技术 以及操作系统和网络通讯...常规支持和应用外,还需要针对无线传感器网络节点的特殊应 用,为节点提供可靠性、...
无线传感器网络节点操作系统研究.pdf
无线传感器网络节点操作系统研究 - ? 28? 计算机应用研究 2006 年 无线传感器网络节点操作系统研究* 李晶 , 王福豹 , 段渭军 , 王建刚 ( 西北 工业 大学 宽带 ...