TinyOs NesC

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

30
基于组件的模型
31
基于组件的模型
32
配件和模块
33
配件和模块

组件有两种:配件和模块

模块(module):提供一个或多个接口的实现
配件(configuration):把其他的组件装配起来,即把组件 使用的接口连接到其提供者

任何一个nesC应用程序都是通过把一个或多个组件进 行连接,从而成为一个可执行的、完整的程序
18

任何一个使用nesC编写的应用程序都是由一个或多个 组件连接而成,从而成为一个可执行的、完整的程序 。
19
接口
20
接口

接口:函数原型的集合 接口是连接不同组件的纽带
接口和接口文件是一一对应的
接口名在TinyOS 操作系统中具有唯一性
21
接口示例:

接口中的函数原型分为命令(command)和事件( event)两种
interface Y;
} ……
}
……
24
组件
25
组件和接口


一个nesC语言编写的程序由一个或多个组件连接 而成。 一个组件(component)由两部分组成:
1)规范说明 包含要用到的接口名字 2)组件的实现
26
组件定义格式示例

27
组件


上层组件对命令的调用,使用关键字call
底层组件在通知事件时,使用关键字signal 来完成对事件 的通知
22
接口

接口是双向的:提供或使用。

组件提供的接口:
描述本组件提供给上一层调用者的功能

组件使用的接口:
描述本组件本身工作时需要的功能

一个组件可以使用(use)或提供(provide)多 个接口或者同一接口的多个实例。
组件的接口说明举例:
module PReaderC { provides interface StdControl; provides interface AMSend;

应用程序采用事件触发去唤醒传感器工作。 事件相当于不同组件之间传递状态信息的信号。
13
TinyOS的技术特点

轻量级线程(lightweight thread)

轻量级线程---任务
任务之间是平等的,不能相互抢占,按先入先出队列进行调 度
14
TinyOS的技术特点

两级调度方式

任务一般用在对于时间要求不是很高的应用中
4
无线传感器网络的特点

传感器网络的特点:

应用多样性、硬件功能有限、资源受限、节点微型化 、分布式任务协作。

单个传感器节点有两个很突出的特点:


并发性密集
传感器节点模块化程度很高

必须针对这些特点来设计WSN操作系统。
5
WSN操作系统的设计目标

要求WSN操作系统能够良好的模块化设计,使应 用服务与硬件资源之间可以随意搭配

任务都很短小

事件一般用在对于时间的要求很严格的应用中,且它可以优 先于任务执行

由硬件中断处理来驱动事件
15
内容提要
1. 2. 3. 4.
WSN操作系统 TinyOS简介 主要技术
TinyOS的编程语言
17
TinyOS的编程语言

TinyOS最初是用汇编和C语言编写的,后来改用支 持组件化编程的nesC语言。
(10) 常量名全部是大写字母, 并用下划线连接两个字词。推荐使用enum 枚举 类型定义整型常量, 而不是使用#define 宏定义方式。
46
编译应用程序

make 工具 例如, 在apps/Blink 目录下, 运行以下命令:
$ make antc5
$ make antc5 install $ make antc5 reinstall
Biblioteka Baidu
WSN操作系统 TinyOS简介 主要技术
编程规范
8
TinyOS简介

TinyOS是一个开源的嵌入式操作系统,它是由加州大学 的伯利克分校开发出来的,主要应用于无线传感器网络方 面。 基于组件的架构,能够快速实现各种应用。 目前已经成为无线传感器网络领域事实上的标准平台 支持的平台:ntelmote2、mica、tinynode。
28
组件
interface AMSend { command result_t send(uint16_t address , uint8_t length , TOS_MsgPtr msg); event result_t sendDone(TOS_MsgPtr msg, result_t success); }

在模块中声明任务的语法: task void taskname(){……}
说明:
taskname:任务名称。 void任务必须空返回
不能带有任何参数

派遣一个任务去执行,语法: post taskname();

43
一个组件可以在命令、事件或者任务里派遣一个任务 一个任务可以安全地调用命令和触发事件
uses interface Timer<TMilli>;
23
uses interface Read<uint16_t>;
组件的接口说明举例:
module A1 {
uses interface X;
uses interface Y;
module A1 {
uses {
等价于:
}
interface X;

命令是要由提供该接口的组件所实现的函数
事件是要在使用该接口的组件中实现
interface SendMsg {
command result_t send(uint16_t address , uint8_t length ,TOS_MsgPtr msg); event result_t sendDone(TOS_MsgPtr msg, result_t success); }
TinyOS与NesC
1
TinyOS操作系统概述
2
内容提要
1. 2. 3. 4.
WSN操作系统 TinyOS简介 主要技术
编程规范
3
无线传感器网络及其操作系统

有人认为没有必要设计一个专门的操作系统,可以直接在 硬件上设计应用程序,但在实际过程中会碰到许多问题:

应用开发难度会加大 软件的重用性差,降低了开发效率。

连接的箭头是 可以对称倒反的

“->”和“<-”作用相同 User组件.接口->Provider组件.接口 等同于 Provider组件.接口<- User组件.接口
38
任务
40
任务

到目前为止,所有代码都是同步(sync)的。它以单一 的前后执行顺序运行,没有任何形式的抢占
⑴ 当同步代码开始运行后,直到完成前它不会释放CPU给 其他的同步代码

36
接口连接
组件及连接举例:


模块组件 (BlinkC.nc)
配置组件(BlinkAppC.nc)
37
接口连接

当一个组件只含有一个接口的时候,可以省略接 口的名字。

LedsC组件只包含一个接口leds BnC.leds -> LedsC.leds
等同于
BnC.leds -> LedsC
⑵ 如果一段同步代码运行时间很长, 它会阻止其他同步代 码运行,从而不利于系统的反应
41
任务

当需要一个组件去做一件事,但此时还有宽裕的时间 ,最好给TinyOS延迟计算的能力

把任务安排在“处理完之前已在等待的事情”之后再执行

任务是一个函数,组件告诉TinyOS稍后再运行而不是 立即运行
42
任务

nesC语言把组件化/模块化思想和基于事件驱动的执行模 型结合起来。

nesC:使用C作为其基础语言,支持所有的C语言 词法和语法,其独有的特色如下:

增加了组件(component)和接口(interface) 定义了接口及如何使用接口表达组件之间关系的方法; 目前只支持组件的静态连接,不能实现动态连接和配置。
11
内容提要
1. 2. 3. 4.
WSN操作系统 TinyOS简介 技术特点
编程规范
12
TinyOS的技术特点

组件化编程(Componented-Based)


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

事件驱动模式(Event-Driven)
3. 编写配置组件:MyDelayC.nc

配置组件MyDelayC向上层提供了接口MyDelay
44
nesC的命名约定
(1) 所有的nesC 文件的扩展名都是.nc ;并且 nesC 编译器要求文件名与文件内 定义的接口名或组件名相匹配 (2) 接口名或组件名是以大写字母开头的混合形式(指大小写字母混合)



9
TinyOS简介

TinyOS的程序采用的是模块化设计


程序核心往往都很小
能够突破传感器存储资源少的限制。
10
TinyOS的设计理念

由于WSN的特殊性,研究人员在设计TinyOS系统 时就提出以下几个原则:
1)能在有限的资源上运行 2)允许高度的并发性 3)适应硬件升级 4)支持多样化的应用程序 5)鲁棒性强: 6)支持一系列平台

操作系统必须能够高效地使用各种资源

必须为应用提供高效的组网和通信机制
6
现有的WSN操作系统



代表性的开源 WSN操作系统:
Tiny OS 2.1:美国加州大学伯克利分校
Mantis OS 0.9.5 :美国克罗拉多大学 SOS 1.7:美国加州大学洛杉矶分校
7
内容提要
1. 2. 3. 4.
组件装配示意图
34
配件和模块

每个nesC应用程序都必须有且只有一个顶层配件连 接内部组件 组件设计分为 模块与配件 的目的:
为了让系统设计者在构建应用程序的时候可以脱离组件的 具体实现。

35
连接

配件将内部的各组件对应的接口连接在一起,这个操作称为连 接(wiring),它将接口的提供者与接口的使用者关联起来。 要把一个接口连接到另一个接口时,一定要是同一类接口 连接操作使用“->”来表示 格式:User组件.接口 -> Provider组件.接口 例如 A.a -> B.b 意为 组件A的接口a连接到组件B的接口b A 是接口的使用者(user) ,而 B是接口的提供者 (provider) BlinkC.Boot -> MainC.Boot;
示例:TestDelay
1. 编写接口:MyDelay.nc

定义了命令start和事件fired

命令start用于开启延时功能
事件fired用于通知延时结束事件
2. 编写模块组件:MyDelayM.nc

MyDelayM模块提供接口MyDelay
⑴ 需实现MyDelay接口中的start命令函数,启动延时 ⑵ 用关键字signal指明什么时候发送事件fired
47
开发平台
48
整体框架

无线传感网节点 基站板


传感器模块
ARM控制平台 扩展模块 M2M模块
49
传感器模块

传感器是将物理世 界的信息进行量化 的设备,是 ATOS 平台中采集数据的 基本来源。
温度传感器模块
温湿传感器模块
光照传感器模块
流量传感器模块
雨滴传感器模块
血压传感器
气体压力传感器
三轴加速度传感器
酒精传感器
可燃气体传感器
GPS 传感器
摄像头传感器
继电器模块
人体红外传感器
线性霍尔传感器
超声波传感器
磁场传感器模块
震动传感器
50
基站板

基站板(或称为网关板), 是 ATOS 实验平台中用于采 集节点数据、烧录程序,以 及串口通讯的多功能设备。 有一个传感器模块连接插槽 ,一个射频模块连接插槽。 一个 USB烧录线接口,USB 转串行接口以及一个标准串 口。 基站板还具有三个红、蓝、 黄三个状态指示灯(即 LED 灯)。

假设:

上层路由组件RouteEngineP使用 AMSend 接口; 下层组件ActiveMessageC 提供 AMSend 接口 call AMSend.send(msg, len);// 调用命令
⑴组件RouterEngineP :
⑵ 底层组件ActiveMessageC:
signal AMSend.sendDone(msg, SUCCESS);//触发事件
29
组件和接口

提供了接口的组件必须实现该接口的命令函数

使用了某接口的组件必须实现该接口的事件函数

当一个组件调用(call)了的一个接口的命令 ,须实现该接 口的事件处理函数

一个组件可以使用(use)或提供(provide)多个接口或 者同一接口的多个实例
组件举例:“PeriodicReaderC.nc”
(3) 如果接口和组件相关,除了组件名采用后缀( "C" 或"P" ) 之外, 建议两者 采用相同的命名
(4) 命令、事件、任务和函数都使用小写字母开头的混合形式。
(9) 命令是分阶段作业的起始部分, 而事件是分阶段作业的后续部分,因此事 件的命名应当与命令有关
建议采用命令函数名的过去式, 或者在命令名后面紧跟" Done" 标识。
相关文档
最新文档