第9章物联网中的常用嵌入式系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第九章物联网中的常用嵌入式系统本章主要内容9.1TinyOS简介9.2安装TinyOS9.3nesC简介9.4TinyOS内部机制简介思考与习题9.1TinyOS简介9.1.1TinyOS概述9.1.2TinyOS的特点9.1.3TinyOS开发平台9.1.4TinyOS开发案例9.1.5TinyOS的基本概念回本章目录9.1.1TinyOS概述TinyOS操作系统采用了组件的结构。系统本身提供了一系列的组件供用户调用,其中包括主组件、应用组件、执行组件、传感组件、通信组件和硬件抽象组件,如下图9-1所示。组件由下到上可分为3类:硬件抽象组件、综合硬件组件和高层软件组件。①硬件抽象组件将物理硬件映射到TinyOS的组件模型;②综合硬件组件模拟高级的硬件行为,如感知组件、通信组件等;③高层次的软件组件实现控制、路由以及数据传输等应用层的功能。硬件抽象组件感知组件执行组件通信组件应用组件主组件(包括调度器)图9-1TinyOS的组件结构回本章目录每个TinyOS程序应当具有至少一个应用组件,即用户组件。该应用组件通过接口调用下层组件提供的服务,实现针对特定应用的具体逻辑功能,如数据采集、数据处理、数据收发等。一个完整的应用系统由一个内核调度器(简称调度器)和许多功能独立且相互联系的组件构成,可以把TinyOS系统和在其上运行的应用程序看成是一个大的“执行程序”。现有的TinyOS系统提供了大多数传感网硬件平台和应用领域里都可用到的组件,例如定时器组件、传感器组件、消息收发组件、电源管理组件等,从而把用户和底层硬件隔离开来。在此基础上,用户只需开发针对特殊硬件和特殊应用需求的少量组件,大大提高了应用的开发效率。TinyOS设计之初的目的是制作一个专属嵌入式无线传感器网络的操作系统。但事实上,由于良好的可扩展性和足够小的代码尺寸,TinyOS在物联网的应用领域中也占有非常重要的地位。由于无线传感器网络的特殊性,研究人员在设计TinyOS系统时就提出以下几个原则:①能在有限的资源上运行:要求执行模式允许在单一的协议栈上运行;②允许高度的并发性:要求执行模式能对事件作出快速的直接响应;③适应硬件升级:要求组件和执行模式能够应对硬件/软件的替换;④支持多样化的应用程序:要求能够根据实际需要,裁减操作系统的服务;⑤鲁棒性强:要求通过组件间有限的交互渠道,就能应对各种复杂情况;⑥支持一系列平台:要求操作系统的服务具有可移植性。TinyOS操作系统采用的轻量级线程技术、两层调度方式、事件驱动模式、主动消息通信技术及组件化编程等有效地提高了传感器节点cpu的使用率,有助于省电操作并简化了应用的开发。TinyOS系统、库和基于TinyOS的应用基本上都是用nesC语言开发的,在TinyOS中采用nesC语言进行应用程序开发。在TinyOS中,应用程序开发人员可以通过nesC语言表达组件以及组件之间的事件/命令接口。组件分为配置文件和模块,程序的流程是通过配置文件中接口的连接实现而构建起来的,而具体实现的逻辑功能是通过模块完成的。每个模块由一组命令和事件组成,这些命令和事件成为该模块的接口。一般来说,上层组件对下层组件发命令,下层组件发信号通知事件的发生,最底层的组件直接和硬件交互,从而自上到下形成一种树状结构。TinyOS的并行处理能力通过任务(task)和中断处理事件(interrupthanderevent)来体现。任务会加入一个FIFO队列中,在执行过程中,任务间没有竞争;但中断处理程序可以打断任务执行。TinyOS采用二级调度机制来满足无线传感网络运行特点,整个程序调度过程如图9-2所示。组件中完成任务提交,由操作系统完成调度。一个节点上应用程序的框图如图9-3所示,操作系统只是在后台提供队列服务。图9-2TinyOS程序调度图9-3一个节点上应用程序的框图与uCOS-II相比,Tiny-OS基于事件驱动的机制就决定了其实时性不高,编程复杂,但其内核占用空间极小,而uCOS-II是基于线程模式的,编程简单,实时性高,但相对带来的开销也大。表9-2比较了Tiny-OS与uCOS-II。操作系统TinyOSuCOS-II运行模式事件线程抢占式内核否是时间可确定性否是支持动态编程否否(最小)内核RAM:47B,ROM:473BRAM:300B,ROM:2kB低功耗是否表9-2Tiny-OS与uCOS-II的比较9.1.2TinyOS的特点TinyOS作为一个专业性非常强的操作系统,主要存在如下几个特点:①拥有专属的编程语言TinyOS应用程序都是用nesC编写,其中nesC是标准C的扩展,在语法上和标准C没有区别,它的应用背景是传感器网络这样的嵌入式系统,这类系统的特点是内存有限,且存在任务和中断两类操作,它的编译器一般都是放在TinyOS的源码工具路径下。②开放源代码所有源码都免费公开,可以访问官方网站,由全世界的TinyOS的爱好者共同维护,目前最新的版本是2.1.1。③.组件化编程TinyOS提供一系列可重用的组件,一个应用程序可以通过连接配置文件将各种组件连接起来,以完成它所需要的功能。回本章目录④通过任务和事件来管理并发进程TinyOS的应用程序都是基于事件驱动模式的,采用事件触发去唤醒传感器工作。事件相当于不同组件之间传递状态信息的信号。当事件对应的硬件中断发生时,系统能够快速地调用相关的事件处理程序。任务:一般用在对于时间要求不是很高的应用中,且任务之间是平等的,即在执行时是按顺序先后来得,而不能互相占先执行,一般为了减少任务的运行时间,要求每一个任务都很短小,能够使系统的负担较轻;支持网络协议的替换。事件:一般用在对于时间的要求很严格的应用中,而且它可以占先优于任务和其他事件执行,它可以被一个操作的完成或是来自外部环境的事件触发,在TinyOS中一般由硬件中断处理来驱动事件。⑤支持网络协议组件的替换除了默认的协议之外,还提供其他协议供用户替换,并且支持客户自定义协议,这对于通信协议分析,非常适用于通信协议的研究工作。⑥代码短小精悍TinyOS的程序采用的是模块化设计,所以它的程序核心往往都很小,一般来说核心代码和数据大概在400Bytes左右;能够突破传感器存储资源少的限制,这能够让TinyOS很有效的运行在无线传感器网络上并去执行相应的管理工作等。9.1.3TinyOS开发平台国内目前可以买到的TinyOS开发平台主要有两种,一种是Crossbow公司WSN开发套件,一种亿道电子的XSBase-WSN开发套件;Crossbow本身就是TinyOS联盟的成员之一,其所有产品都在TinyOS源码的Platform目录下可以找到,可以算得上是TinyOS技术商用化的代表;在国内有一家代理,开发平台的做工非常不错,产品覆盖面也比较广,主要的缺点就是产品太贵,而且中文的资料较少。亿道电子的WSN套件使用的是较先进CC2430芯片,同时支持TinyOS和Z-stack两种开发方式,并且包含大量的中文教材和使用手册,硬件移植的也非常稳定,所有的TinyOS测试用例都能正常运行,而且还带了大量的中文教材、使用手册和实验用例,其中值得一提的是,该产品搭建了一整套的解决方案框架,实现了异构网络之间的互联互通,可以在任何一地通过GPRS手机上网,访问节点上的物理数据,开发者可以迅速的在这个框架下做二次开发。回本章目录9.1.4TinyOS开发案例目前有多个采用TinyOS的研究项目,如UCLA(加州大学洛杉矶分校)的ShahinFarshchi在进行一项以TinyOS为基础的无线神经界面研究。这样的系统在100Hz/频道的采样频率下可传感、放大、传输神经信号,系统小巧、成本低、重量轻、功率小。系统要求一个接收器接收、解调、显示传输的神经信号。在采样精度为8bit时,系统的速度可达5600。该速度可保证8个EEG频道、或1个速度为每秒5.6K采样频道的可靠传输。研究者目前的奋斗目标是提高该基于TinyOS的传感网络的数据传输速度,设计与被测对象连接的前端神经放大电路。路易斯安娜州立大学和位于BatonRouge的南方大学的Nian-FengTzeng博士正在研究应用于石油/气体开发和管理的UcoMS(UbiquitousComputingandMonitoringSystem,泛计算和监控系统)。该系统适用于传感网络、无线通信和网格计算,主要功能包括帮助钻孔、操作数据记录和处理、在线平台信息发布和显示、设备监控/入侵检测、地震处理、复杂表面设备和管道的管理。也可使用UCoMS监控、维护淘汰的平台。另外,Freescale正在其Zigbee开发板上测试TinyOS和TinyDB,波士顿大学的WeiLi将其用于传感网络的控制和优化。回本章目录9.1.5TinyOS的基本概念TinyOS系统、库及应用程序都是用nesC语言写的语言写的,这时一种新的用于编写结构化的基于组件的应用程序的语言。nesC语言主要用于诸如传感器网络等嵌入式系统。nesC具有类似于C语言的语法,但支持TinyOS的并发模型,同时具有结构化机制、命名机制,能够与其他软组件链接在一起从而形成一个鲁棒的网络嵌入式系统。其主要目标是帮助应用程序设计者建立可易于组合成完整、并发式系统的组件,并能够在编译时执行广泛的检查。TinyOS定义了许多在nesC中所表达的重要概念。首先,nesC应用程序要建立在定义良好、具有双向接口的组件之上。其次,nesC定义了并发模型,该模型是基于任务(task)及硬件事件句柄(hardwareeventhandler)的,在编译时会检测数据争用(datarace)。回本章目录⑴组件任何一个nesC应用程序都是有一个或多个组件链接起来,从而形成一个完整的可执行程序的。组件提供(provide)并使用(use)接口。这些接口是组件的唯一访问点并且它们是双向的。接口声明了一组函数,称为命令(command),接口的提供者必须实现它们;还声明了另外一组函数,称为事件(event),接口的使用者必须实现它们。对于一个组件而言,如果它要使用某个接口中的命令,它必须实现这个接口的事件。一个组件可以使用或提供多个接口以及同一个接口的多个实例。在nesC中有两种类型的组件,分别称为模块(module)和配件(configuration)。模块提供应用程序代码,实现一个或多个接口;配件则是用来将其它组件装配起来的组件,将各个组件所使用的接口与其它组件提供的接口连接在一起。这种行为称为导通(wiring)。每个nesC应用程序都由一个顶级配置所描述,其内容就是将该应用程序所用到的所有组件导通起来,形成一个有机整体。⑵并发模型TinyOS一次仅执行一个程序。组成程序的组件来自于两个方面,一部分是系统提供的组件,另一部分是为特定应用用户自定义的组件。程序运行时,有两个执行线程:一个称为任务(task),另一个称为硬件事件句柄(hardwareeventhandler)。任务是被延期执行的函数,它们一旦被调度,就会运行直至结束,并且在运行过程中不准相互抢占。硬件事件句柄是用来相应和处理硬件中断的,虽然也要运行完毕,但它们可能会抢占任务或其他硬件事件句柄的执行。命令和事件要作为硬件事件句柄的一部分而执行必须使用关键字async来声明。因为任务和硬件事件句柄可能被其他异步代码所抢占,所以nesC程序易于受到特定竞争条件的影响,导致产生不一致或不正确的数据。避免竞争的办法通常是在任务内排他地访问共享数据,或访问所有数据都使用原子语句。nesC编译器会在编译时向程序员报告潜在的数据争用,这里面可能包含事实上并不可能发生的冲突。如果程序员确实可以担保对某个数据的访问不会导致麻烦,可以将该变量使用关键字norace来声明,但使用这个关键字一定要格外小心。9.2安装TinyOS下面介绍安装TinyOS的步骤,共需要六个步骤,下面的内容以及下载的地址都可在网站

1 / 61
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功