《【精品】tinyos操作系统开发技术及实践(西电版第1章tinyos概述(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】tinyos操作系统开发技术及实践(西电版第1章tinyos概述(可编辑.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、TinyOS操作系统开发技术及实践(西电版)第1章 TinyOS概述第1章 TinyOS概述 2 2 1.1 无线传感器网络无线传感器网络 1.1.1 关键技术关键技术当前无线传感网研究热点主要集中在以下几个方面,它们也被普遍认为是无线传感网的关键技术:时间同步:是完成实时信息采集的基本要求,并且是提高定位精度的关键手段。拓扑控制:在满足网络覆盖度和连通度的前提下,通过功率控制或层次拓扑控制,最小化网络的能量消耗。定位技术:包括节点自定位和网络区域内的目标定位跟踪。网络安全:密钥管理、身份认证和数据加密方法、攻击检测与抵御、安全路由协议和隐私问题。第1章 TinyOS概述 3 3网络通信:核心
2、问题是能量有效性或能力节省。主要热点集中在网络层和链路层,例如链路层MAC协议如何节省能力,网络层新路由协议提出或路由协议改进。系统软件:WSN是深度嵌入的网络系统,因此要求操作系统既要能完成网络系统要求的各项功能,又不能过于复杂。目前看,TinyOS是最成功的WSN专用系统。数据管理:包括分布式动态实时数据管理以及信息融合。能量供给:包括能量的获取和存储。第1章 TinyOS概述 4 41.1.2 特点特点无线传感网与传统的无线网络(如Ad hoc网络、GSM、CDMA、3G、Beyond3G、4G、WLAN和WMAN等)有着不同的设计思想,它的特点主要表现在以下几方面:节点规模:节点数目庞
3、大,可以达到成千上万。节点部署:节点在部署完成之后大部分节点不会再移动,网络拓扑结构是静态的。工作模式:多对一通信,路由协议以数据为中心。无线传感网的详细特点介绍请参见本书所属系列教材无线传感器网络技术原理及应用的第一章。第1章 TinyOS概述 5 51.2 WSN操作系统操作系统 无线传感器网络操作系统(简称为WSN操作系统或WSNOS)是无线传感器网络的关键支撑技术之一(即系统软件技术)。WSN操作系统可以有效地管理硬件资源和执行任务,降低传感器网络的应用开发难度,提高软件的重用性。当前比较流行WSN操作系统有TinyOS、Contiki、MANTIS、SOS,它们的特点及对比如表1-1
4、所示。第1章 TinyOS概述 6 6第1章 TinyOS概述 7 7第1章 TinyOS概述 8 82.项目发展项目发展TinyOS是开源项目,目前已不再由UCB单独开发和维护,从0.4版到2.0版,TinyOS由SourceF(全球最大开源软件开发平台和仓库)的一个开放项目,逐渐演变成了一个国际合作项目。从2012年12月开始,TinyOS的开发和维护(包括开发邮件列表和BUG跟踪记录)逐渐过渡到GitHub(一个逐渐流行起来的分布式版本控制系统)上,至2013年1月项目迁移完毕。TinyOS在GitHub上的虚拟主机地址是:https:/ TinyOS概述 9 9图1-1 TinyOS产
5、品标志第1章 TinyOS概述 10 103.版本变化版本变化从1999年TinyOS平台(官方取名为WEC)由UBC开发后,到2003年8月TinyOS的最新版本2.1.2,TinyOS不断改进。其中,在1.0版本以前TinyOS都是由C语言写成(混合少量Perl脚本)的,后来用nesC语言重新编写。其重要版本变化情况如表1-2所示。第1章 TinyOS概述 11 11第1章 TinyOS概述 12 121.3.2 体系结构体系结构TinyOS操作系统采用组件式分层体系结构,这种体系结构可以快速地实现各种应用,详细内容请参见本书第3章。第1章 TinyOS概述 13 131.3.3 硬件支持
6、硬件支持TinyOS可运行于不同的硬件平台和微处理器上,并支持多款射频芯片,且支持NOR Flash设备。以2.1.1版为例的TinyOS支持以下硬件:硬件平台:TinyOS支持多达十几种不同的硬件平台(每种平台代表着一类处理器、射频、存储和IO引脚的组合)。TinyOS支持的硬件平台有:telos家族(包括telosa和telosb)、micaZ、IRIS、shimmer、epic、mulle、tinynode、span以及iMote2等。微处理器:TI公司的MSP430、Atmel公司的ATMega128、Intel公司的px27ax微处理器。第1章 TinyOS概述 14 14射频芯片:
7、TI的CC1000和CC2420(经过移植后还可支持CC2430和CC2530)、Atmel公司的RF212和RF230、Infineon公司的TDA5250、Semtech公司的XE1205。Flash芯片:TinyOS支持两款NOR Flash芯片,即Atmel公司的AT45DB芯片和STMicroelectronics公司的STM25P芯片。第1章 TinyOS概述 15 151.3.4 网络功能网络功能TinyOS有较为丰富的网络支持,主要包括多跳路由协议和最新的IPv6协议:多跳路由协议,主要包括数据分发协议和汇聚协议。分发协议:用于网络中数据共享,网络中每个节点都保存一份数据的副本
8、。TinyOS主要支持两种分发协议库,即Drip和DIP。汇聚协议:用于将网络中的数据收集到某个点(称为root或根节点),典型的用法如将通过root传输给PC。TinyOS支持的标准汇聚协议叫“汇聚树协议”(英语简称CTP)。IPv6,即用于无线通信网络的6LoWPAN(2.1.1版本以后)。第1章 TinyOS概述 16 161.3.5 特点特点1.优点优点TinyOS的优点体现在以下几方面:TinyOS有成千上万的用户,现有的体系结构已有5年以上的历史,代码可靠、有效,错误极少,这对工程项目来说至关重要。支持低功耗和并发执行模型,因此特别适合于无线传感器节点。支持技术上优异的网络协议,如
9、汇聚协议CTP和6LoWPAN协议(用于无线网络的IPv6协议)等。第1章 TinyOS概述 17 172.缺点缺点TinyOS有两大弱点:它的组件式编程模型对于新手来说需要一段时间来适应。对于计算密集型程序需要程序员将计算分成若干小部分,逐个执行,即需要使用TinyOS的“分阶段作业”机制(Split Phase),此类程序比较难写。第1章 TinyOS概述 18 181.4 开发环境简介开发环境简介 1.4.1 开发环境开发环境TinyOS本质上是一个编程框架,它的完整开发环境包括以下内容:操作系统:TinyOS需要在Linux环境下进行开发,如果要在Windows上进行开发,需要安装模拟
10、Linux操作系统的Cygwin程序包。JAVA JDK:TinyOS部分工具命令需要JAVA支持,另外JAVA还可用于某个硬件平台(如mote)与PC机进行数据交互的模拟程序编写,以方便用户观看运行结果。TinyOS操作系统:TinyOS编程框架本身。第1章 TinyOS概述 19 19编译工具链:当前官方发布的是三个工具,包括nesC语言编译器、Deputy工具和tinyos-tools。GraphViz可视化工具:TinyOS编译工具包括一个nesdoc工具,可以将用户nesC源码中的组件调用关系生成HTML文档,期间用到的GraphViz工具可绘制“调用关系图”。本地编译器:nesC编
11、译器生成的C程序最终还需要特定硬件平台的编译器编译成硬件可运行的二进制代码,例如若使用CC2530,可安装IAR For 51编译器。代码编辑器:在Linux下可以使用vim、emacs、gedit等,如果是在Windows下使用Cygwin进行TinyOS开发,推荐使用EditPlus。第1章 TinyOS概述 2020本书使用的开发环境如下:硬件平台:与本书配套的Zigbee开发套件。操作系统:基于Windows的Cygwin。TinyOS操作系统:tinyos-2.1.0-2.cygwin.noarch.rpm。TinyOS工具链:nesc-1.3.0-1.cygwin.i386.rpm
12、、tinyos-deputy-1.1-1.cygwin.i386.rpm、tinyos-tools-1.3.0-1.cygwin.i386.rpm。本地编译器:IAR For 51。代码编辑器:EditPlus 3.30。其他工具:jdk1.6、graphviz-1.10。开发环境的详细安装过程,请参见本书实践篇。第1章 TinyOS概述 21 211.4.2 编程特点编程特点TinyOS操作系统由nesC语言写成,从程序员角度看,它的基本作用就是提供了一组API接口(包括可调用的组件库、部分C语言结构体和数据类型),以及一些编程规则。具体来说,基于nesC语言的TinyOS编程行为具有以下特
13、点:平台化编程:实际开发时,首先要根据用户选定的硬件平台移植TinyOS,后续开发都在这个“特定平台”上进行工作(本书所有示例是基于TI CC2530芯片的代号为mytinyos的开发平台)。第1章 TinyOS概述 2222兼容C语法:使用nesC进行TinyOS编程时可以使用C语言中几乎所有的结构体、函数等语法。事实上,nesC仅仅是在较高的层次上增加了一些新的数据结构(即接口和组件)和并发执行模型。组件式编程:组件类似于面向对象语言(如C+或JAVA)的类对象,可以提供或使用接口(interface),并且有自己的内部实现(implementation),程序员使用代码确定组件之间的连接
14、关系。与C+或JAVA不同的是,组件对象的实例化是在编译时进行的。任务式编程:TinyOS提供一个简单的延期任务机制,即用task关键字修饰的任务函数使用post关键字投递后,可以被TinyOS的任务调度程序调度执行。任务可以使组件在“后台”运行,而不是立即执行。第1章 TinyOS概述 2323分阶段作业编程:当编写一个需要长时间运行的作业代码时,将其分为两个阶段,即调用和完成调用。例如一个读传感器工作,可以写成两个函数,read和readDone函数,当read函数读完时,在函数内部通过任务给调用者激发一个readDone事件。事件驱动编程:事件机制导致代码的执行路径是不可预知的,不同的事
15、件执行不同的代码片段。TinyOS有两种事件:硬件中断事件和程序事件(由程序本身使用signal关键字来激发的事件)。并发执行模型:nesC将代码区分为同步(sync)代码和异步(async)代码。其中同步代码仅由任务来执行;异步代码可被任务和中断处理程序执行,nesC编译器检查并确保这个规则被执行。关于TinyOS详细编程语法(即nesC编程语法)请参见本书第2章。第1章 TinyOS概述 24241.4.3 目录结构目录结构1.Cygwin目录目录Cygwin是一个在Windows操作系统上运行的UNIX/Linux模拟环境,它对于Windows用户学习UNIX/Linux操作或开发非常有
16、用。由于Cygwin是模拟UNIX/Linux,因此它的目录结构与真实的UNIX/Linux非常相似。Cygwin在Windows下安装完毕后,在资源管理器中看到的目录结构如图1-2所示。各子目录的说明如表1-3所示。第1章 TinyOS概述 2525图1-2 Cygwin目录结构 第1章 TinyOS概述 2626第1章 TinyOS概述 2727第1章 TinyOS概述 28282.TinyOS源码目录源码目录TinyOS源码默认安装在Cygwin下的opt目录,如图1-3所示。图1-3 TinyOS-2.x源码目录 第1章 TinyOS概述 2929其中TinyOS的各子目录说明如表1-
17、4所示。第1章 TinyOS概述 30303.mytinyos源码目录源码目录本书配套的硬件设备是基于CC2530的开发板,官方发布的TinyOS目前还不支持TI CC2530芯片,因此本书所用的mytinyos是移植后的平台,详细移植过程请参见本书第4章。一般情况下,为了方便发布移植好的新平台,经常把新平台的相关源码和脚本文件独立成一个目录,放在Cygwin的“/opt”目录内,并且尽量按照TinyOS官方目录结构进行安排其子目录。mytinyos源码目录结构如图1-4所示。第1章 TinyOS概述 31 31图1-4 MyTinyOS源码目录结构 第1章 TinyOS概述 32321.5
18、第一个第一个TinyOS程序程序 1.5.1 程序开发过程程序开发过程TinyOS应用程序一般开发过程如下:(1)确定硬件资源。(2)应用需求分析。(3)应用程序组件和接口设计。(4)按组件编写程序代码以及Makefile文件。(5)编译、下载、调试程序。上述开发过程中的第(3)、(4)步是TinyOS区别于其他语言程序(例如C或JAVA)的特色,这是由TinyOS或nesC编程特点决定的。第1章 TinyOS概述 33331.5.2 第一个第一个TinyOS程序程序下述内容用于实现任务描述1.D.1,编写一个开机点亮LED的TinyOS程序,并编译和下载运行。1.组件设计组件设计根据Tiny
19、OS的组件式编程规则,本例可以划分为两个组件:顶层配置组件和业务组件(也叫核心应用模块),它们的功能如下:顶层配置组件:一个应用程序,有且只能有一个顶层配置组件,用于配置程序中的组件之间的接口链接关系。业务组件:实现点亮LED。第1章 TinyOS概述 34342.代码编写代码编写(1)打开Windws资源管理器,在“Cygwin/opt/mytinyos/apps”新建“LedOn”子目录(或在Cygwin下用mkdir命令新建子目录),结果如图1-5所示。(2)使用EditPlus程序在此目录内编写两个组件文件,如图1-6所示。第1章 TinyOS概述 3535图1-5 新建LedOn子目
20、录 第1章 TinyOS概述 3636 图1-6 EditPlus程序编写组件代码 第1章 TinyOS概述 3737代码如下:【描述1.D.1】LedOnAppC.nc、LedOnC.nc/*LedOnAppC.nc文件文件*/configuration LedOnAppCimplementation components MainC,LedOnC,LedsC;MainC.Boot LedsC.Leds;第1章 TinyOS概述 3838/*LedOnC.nc文件文件 */module LedOnC uses interface Boot;uses interface Leds;implem
21、entation第1章 TinyOS概述 3939 task void DoLedOn()call Leds.led0On();event void Boot.booted()post DoLedOn();第1章 TinyOS概述 4040对于上述代码,说明以下几点:一般每个组件使用一个nesC文件。nesC文件的扩展名是“.nc”。顶层配置组件的命名一般含有“App”字符串。具有关系的两个组件含有相同的字符串,如本例中的“LedOnAppC”和“LedOnC”。以字母“C”结尾的组件,约定为是公共组件(私有组件约定为“P”结尾)。关键字“configuration”、“module”用于定义
22、组件。关键字“task”和“event”分别用于修饰函数为任务函数和事件函数。关键字“post”用于投递任务。点亮LED是通过在任务函数DoLedOn()中调用Leds接口的ledOn()函数实现的。nesC文件中的注释与C语言中的注释格式一致。第1章 TinyOS概述 41 413.编写编写Makefile文件文件使用EditPlus程序在“LedOnAppc”目录内建立Makefile文件,如图1-7所示。其脚本内容如描述1.D.1 Makefile所示。【描述1.D.1】MakefileCOMPONENT=LedOnAppCinclude$(MAKERULES)上述代码是一种固定写法,每
23、个TinyOS的应用程序的Makefile文件都至少要包含这两行代码,其中:“COMPONENT”变量用于指定顶层配置组件的名字。“include”语句用于包含环境变量“MAKERULES”,它指向TinyOS的默认Makefile文件(tinyos-2.x/support/make/Makerules文件)。关于TinyOS的编译规则说明,参见本书第4章。第1章 TinyOS概述 4242图1-7 Makefile文件 第1章 TinyOS概述 43434.编译程序编译程序编译TinyOS应用程序需要在Cygwin下调用make工具命令,具体操作过程如下:(1)从Windows开始菜单中启动
24、Cygwin,如图1-8所示,进入mytinyos的命令行环境,如图1-9所示。第1章 TinyOS概述 4444图1-8 启动Cygwin 第1章 TinyOS概述 4545图1-9 mytinyos的命令行环境 第1章 TinyOS概述 4646(2)在命令行上,输入描述1.D.1 cd命令,进入“LedOn”应用程序目录。【描述【描述1.D.1】cd命令命令$cd LedOn执行结果如图1-10所示。第1章 TinyOS概述 4747图1-10 进入LedOn目录 第1章 TinyOS概述 4848(3)在命令行上继续输入描述1.D.1 make cc2530命令,编译LedOn程序。【
25、描述1.D.1】make cc2530命令$make cc2530执行结果如图1-11所示。第1章 TinyOS概述 4949图1-11 编译LenOn程序 第1章 TinyOS概述 50505.下载运行程序下载运行程序上述步骤仅是将LedOn程序目录中的nesC组件文件编译成C语言文件,进一步可以将该C文件编译成CC2530可以执行的二进制程序,具体操作步骤如下:(1)将仿真器一端与开发板相连,另一端与PC机相连。(2)在命令行上运行描述1.D.1 make cc2530 install命令,可以将C文件编译成二进制程序,并且将程序烧写至设备内。【描述1.D.1】make cc2530 in
26、stall命令$make cc2530 install执行结果如图1-12所示。第1章 TinyOS概述 51 51图1-12 下载运行程序 第1章 TinyOS概述 5252观察设备运行情况,将看到有一只LED被点亮。6.查看组件调用关系图查看组件调用关系图如果要分析程序的组件调用关系图,可以使用描述1.D.1 make cc2530 docs命令生成。【描述1.D.1】make cc2530 docs命令$make cc2530 docs命令执行如图1-13所示。最后用浏览器打开“/opt/mytinyos/doc/nesdoc/LedOnAppC/cc2530”目录下的“index.ht
27、ml”即可,如图1-14所示。第1章 TinyOS概述 5353图1-13 生成组件调用关系图 第1章 TinyOS概述 5454图1-14 组件调用关系图 第1章 TinyOS概述 5555小结小结通过本章的学习,应该能够了解到:无线传感器网络是大量静止或移动的传感器节点以自组织和多跳的方式构成的无线网络。无线传感器网络操作系统是无线传感器网络的关键支撑技术之一。TinyOS最初是由加利福尼亚大学伯克利分校专门为无线传感器网络定制研发的嵌入式操作系统。TinyOS支持多跳路由协议和最新的IPv6协议。TinyOS操作系统是由nesC语言写成的,nesC是C语言的一种变种。TinyOS本质上是一个编程框架。