导图社区 无线传感器网络 第四章
该章主要讲述常见的操作系统,重点描述TinyOS操作系统的编写语法和相关平台介绍
编辑于2020-05-29 10:17:31第四章(第十讲PPT)
典型的操作系统介绍
MANTIS OS操作系统
1、由美国科罗拉多大学开发,源代码公开。 2、内核和API采用标准C语言编写,易于用户入门和应用 3、整个内核占用RAM小于500B 4、可支持Mica系列的节点和MANTIS项目组研发的namph节点 5、MOS系统有一些成功的实际应用:美国比特鲁特国家森林公园布署了采用MOS系统的传感器网络,运行良好。
开发语言:标准C语言
SOS操作系统
1、加州大学洛杉机分析研发,也采用事件驱动,最大的特点是能够动态地装载软件模块 2、采用标准C语言编写 3、支持的硬件平台有Mica系列和耶鲁大学的XYZ节点
开发语言:标准C语言
TinyOS介绍
1、由加州大学伯克利分校开发,最新版本使用NesC语言开发 2、核心代码和数据大概在400bytes左右 3、源码对外开放,不再由UCB的开发小组维护,而由公开的众多小组共同开发和维护。 4、在实际项目中应用广泛:国内的“绿野千传”
开发语言:NesC语言
设计理念
1、能在有限的资源上运行:要求执行模式允许在单一的协议栈上运行 2、允许高度的并发性:要示执行模式能对事件作出快速直接响应 3、适应硬件升级:要求组件和执行模式能够应对硬件/软件的替换 4、支持多样化的应用程序:要求能够根据实际需要,裁判操作系统的服务 5、鲁棒性强:要求通过组件间有限的交互渠道,就能应对各种复杂情况 6、支持一系列平台:要求操作系统的服务具有可移植性
NesC开发语法介绍
命令、事件
•command是在接口中的一种函数,是接口提供的可供调用的命令 –这种函数要求接口的提供者实现 –接口的使用者则会调用这种函数 •command 定义: interface A1{ command result_t cmd1(int arg); …… } •接口的提供者 •M1.nc module M1{ provides interface A1; …… } implementation{ command result_t A1.cmd1(int arg){ …… } } •接口的使用者 •M2.nc module M2{ uses interface A1; } implementation{ …… result_t result = call A1.cmd1(0x11); …… } •event也是接口中的一种函数,这种函数要求接口的提供者调用,而接口的使用者则会实现这种函数 •event的定义 interface A1{ …… event void event1(int arg1, int arg2); } •接口提供者:M1.nc module M1{ provides interface A1; } implementation{ …… signal A1.event1(0x1,0x2); /*发出对应的事件,等同于调用事件处理函数*/ …… } •接口的提供者发出事件时,必须使用signal关键字
连接
•配置组件C1.nc • configuration C1 { provides interface A1; //提供接口A1 } implementation { components M1,M2; M1.B1-> M2.B1; A1= M1.A1; //组件M1提供A1接口 }
任务
•任务在模块的实现里声明句法如下: task void taskname(){……} –taskname是设定的任务名称。 任务必须空返回,并不能带有任何参数。 • 提交一个任务去(稍后)执行,句法: post taskname(); •task一般也是放在module中 •例如:文件M1.nc module M1{ } implementation{ …… task void task1(){ …… } void f1(){ post task1(); } }
TinyOS详细介绍
设计理念
1、能在有限的资源上运行 2、允许高度的并发性 3、适应硬件升级 4、支持多样化的应用程序 5、鲁棒性强 6、支持一系列平台
TinyOS的版本
•TinyOS 0.4, 0.6 (2000-2001) •TinyOS 1.X –TinyOS 1.0 (2002):第一个nesC版本 –TinyOS 1.1 (2003) –1.x版本存在缺陷,不稳定,对硬件的依赖性强(mica) •TinyOS 2.X –TinyOS 2.0 (2004-2006),完全重写的一个版本 –TinyOS 2.1
硬件平台
•eyesIFXv2, ETH Zurich –TI MSP430, Infineon TDA5250 •Intelmote2, Intel –PXA271 Xscale Processor, TI CC2420 •Mica2, UCB –Atmel128, TI CC1000 •Micaz, UCB –Atmel128, CC2420 •Telosb, UCB –MSP430, TI CC2420 •Tinynode, EPFL Switzerland –MSP430, Semtch radio transceiver XE1205
TinyOS特点
1、模块化设计,核心尺寸小 2、组件化编程(Componented-Based Programming) 3、事件驱动模式(Event-Driven Model) 4、任务和事件并发模式(Tasks and Events Concurrency Model) 5、主动消息模式(Active Message Model)
TinyOS的组件
1、命令处理函数 2、事件处理函数 3、任务集合 4、描述状态信息和固定数据结构的框架。
TinyOS组件类型
1、硬件抽象组件:将物理硬件映射到TinyOS的组件模型 2、综合硬件组件:模拟高级的硬件行为,如感知组件、通信组件等 3、高层软件组件:实现控制、路由以及数据传输待应用层功能
TinyOS应用程序四个部分
1、xxx.h 定义常量和数据结构 2、Makefile 编译文件 3、xxxAppC.nc 顶级配置文件,是对程序总体结构上的一个说明 4、xxxC.nc和xxx1C.nc, xxx2C.nc, …
环境监测网络设置3种类型的消息
1、Beacon消息:该消息起源于槽节点,网络中的其它节点通过接收此消息建立从自己到槽节点的路由。 2、Report消息:各节点通过此消息把采集到的环境数据发送至槽节点。 3、Hello消息:用于相邻节点之间交换信息。
TinyOS的程序模型
多跳无线通信的组件集合与组件之间的关系图
NesC开发步骤
(1)在/opt/tinyos-2.x/apps目录下建立一个文件夹,通常以应用的名字命名。该文件夹通常包含以下4个文件:定制运行环境的makefile文件、头文件、顶层配件和核心处理模块。 (2)定义头文件。与一般的程序开发类似,在头文件中定义一些数据结构,但头文件不是必需的。 (3)编写顶层配件,包括3部分内容:接口的提供和使用的情况、使用的组件列表以及组件间的接口连接关系,这些都取决于应用程序的业务功能。 (4)编写核心处理模块,包括两部分内容:接口的提供、使用的情况以及具体的实现代码。如果系统组件能满足应用需求,那么就不需要定义其他组件;否则,还要自定义组件以实现某些功能。这些自定义组件可放在系统组件库里,也可放在当前应用程序的目录里。