TinyOS体系结构

上传人:n**** 文档编号:50767055 上传时间:2018-08-10 格式:PPT 页数:63 大小:2.17MB
返回 下载 相关 举报
TinyOS体系结构_第1页
第1页 / 共63页
TinyOS体系结构_第2页
第2页 / 共63页
TinyOS体系结构_第3页
第3页 / 共63页
TinyOS体系结构_第4页
第4页 / 共63页
TinyOS体系结构_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《TinyOS体系结构》由会员分享,可在线阅读,更多相关《TinyOS体系结构(63页珍藏版)》请在金锄头文库上搜索。

1、第 3 章TinyOS体系结构本章目标掌握TinyOS体系结构的各部分组成掌握硬件抽象组件的作用掌握硬件抽象组件的架构掌握硬件表示层、适配层、接口层的作用掌握综合硬件组件的组成熟悉TinyOS任务的调度理解跨平台的应用23.1 概述硬件抽象组件:将物理硬件映射到TinyOS 的组件模型。综合硬件组件:模拟高级的硬件行为,如感知组件、执行组件和通信组件。高层软件组件:包含应用组件,其主要功能是向底层组件发出命令,底层组件向高层组件报告事件。任务调度组件:即主组件,负责对 整个TinyOS 进行任务的调度,它包括一个任务调度器。33.1 概述第一层维护 着命令和事件,主要是在硬件中断发生时对组 件

2、的状态进行处理;第二层维护 着任务,负责各种计算,只有当组件状态维护 工作完成后,任务才能被调度。 两层43.1 概述TinyOS 调度模型主要有以下几个特点 l任务单线程运行,且运行结束后,只分配单个任务栈,这对内存受限的系统很有利。l没有进程管理概念,对任务按简单的FIFO 队列进行调度。lFIFO 的任务调度策略具有能耗敏感性,当任务队列为空时,处理器进入休眠,随后由外部中断事件唤醒CPU 进行任务调度。l两级的调度结构,可以实现优先执行少量同事件相关的处理,同时打断长事件运行的任务。l基于事件的调度策略,只需要少量空间就可获得并发性,与事件相关的任务可以很快被处理,不允许阻塞,具有高度

3、并发性。l任务之间相互平等,没有优先级的概念。53.2 硬件抽象组件功能 l主要负责物理硬件的控制 优点 l提高代码的可重用性和可移植性;l实现效率和性能的优化。63.2 硬件抽象层 硬件表示层与硬件的寄存器和中断密切相关,不同芯片的硬件平台的硬件表示层是不同的,这一层与平台的移植息息相关。 硬件适配层带有丰富的硬件相关的接口,有助于提高效率;不同平台的硬件适配层有可能不同。 硬件接口层提供与平台无关的接口,便于代码的移植。这一层与平台无关,上层可以调用这一层的接口实现对 下层的控制。三层73.2 硬件抽象层 硬件表示层(Hardware Presentation Layer, 简称HPL )

4、由一系列组件组成,该层组 件直接位于硬件与软件的接口之间。该层组 件访问硬件的一般方法是通过内存或I/O映射,并且硬件可以通过中断信号来请求服务。 HPL 组件提供的接口完全由平台的硬件模块本身功能决定 。83.2 硬件抽象层HPL 组件都应该具备以下几个功能 :l为了实现更有效的电源管理,必须有硬件模块的初始化、开始和停止命令;l为控制硬件操作的寄存器提供“get”和“set”命令;l为常用的标识位设定和测试操作提供单独的命令;l开启和禁用中断的命令;l硬件中断的服务程序,HPL 组件的中断服务程序只负责临界操作,如复制一个变量、清空一些标识等行为。93.2 硬件抽象层以mytinyOS平台

5、为例,此平台的HPL 组件大都存在于与CC2530 芯片相关的文件中 103.2 硬件抽象层以“tos/chips/cc2530/”目录下的HplCC2530GeneralIOC.nc 文件为例,HplCC2530GeneralIOC.nc 文件是针对CC2530 的I/O的实现 113.2 硬件抽象层HplCC2530GeneralIOC.nc 文件I/O的实现的代码示例 /HplCC2530GenerallOC.nc文件async command bool Port00.get() return P0_0; async command void Port00.set() P0_0 = 1;

6、 async command void Port00.clr() P0_0 = 0; async command void Port00.toggle() P0_0 = 1; async command void Port00.makeInput() P0SEL P0DIR async command bool Port00.isInput() return (P0DIR async command void Port00.makeOutput() P0SEL P0DIR |= _BV(0); async command bool Port00.isOutput() return P0DIR

7、HplCC2530GeneralIOC.nc 文件使用“get”和“set”命令直接操作寄存器,为上层提供软硬件的接口。HPL 组件简化了对硬件的操作,无须使用隐藏的宏和寄存器(其定义位于编译库的头文件中),用户可以通过常见的接口访问硬件。 123.2 硬件抽象层HPL 的接口组件一般具有以下两个特点 :l除了自动操作常用的命令外,HPL 层没有提供任何实质性的硬件抽象。它隐藏了最依赖于同一类别的不同HPL 硬件模块。增强更高层抽象资源的独立型。l用户只需简单地重新绑定HPL 组件,而不必重新编写代码就可以在不同的USART 模块之间进行切换。133.2 硬件抽象层硬件适配层(Hardware

8、 Adaptation Layer,简称HAL)由一系列组件组成,该层是硬件抽象架构的核心部分,它使用由HPL 层提供的原始接口,建立起合适的硬件抽象,以降低与硬件资源使用相关的复杂性。 143.2 硬件抽象层硬件适配层组件有以下特点: l硬件抽象架构允许HAL组件持有可用于资源仲裁和控制的状态变量。l由于无线传感器网络对执行效率要求较高,HAL层的硬件抽象必须适合于具体的设备类型和平台特征。lHAL接口并不隐藏通用模型的特殊硬件功能,而是提供特定的功能和最好的抽象来简化应用程序的开发,同时保证资源的利用效率,。l为了实现对硬件抽象的访问,HAL组件应当使用丰富的、定制的接口,而不是通过重载命

9、令隐藏所有功能的标准接口。这样的设计方式使得编译时对接口错误的检查效率更高。153.2 硬件抽象层以mytinyos平台为例,在“mytinyostosplatformscc2530” 目录下的PlatformLedsC.nc 文件为此平台下的HAL组件之一 163.2 硬件抽象层打开PlatformLedsC.nc 文件173.2 硬件抽象层PlatformLedsC.nc 组件的 implementation 部分implementationcomponents MainC;components PlatformP;Init = MainC.SoftwareInit;components

10、HplCC2530GeneralIOC as IO;Led0 = IO.Port10;Led1 = IO.Port11;Led2 = IO.Port12; Led3 = IO.Port13; 183.2 硬件抽象层硬件抽象架构的最后组成部分是硬件接口层(Hardware Interface Layer,简写为HIL)。HIL组件使用由HAL层提供的平台相关的硬件抽象,且表现为可跨平台使用的独立接口。这些独立接口提供了与平台相关的硬件抽象,从而隐藏了硬件之间的差异,简化了应用软件的开发。在硬件抽象架构里,将HIL分为强HIL和弱HIL两种不同的抽象级别:l强HIL:HIL抽象具有完全的硬件无关性

11、,称为强HIL。l弱HIL:硬件抽象达不到与硬件完全无关性,称为弱HIL。193.2 硬件抽象层强HIL符合硬件抽象架构中对HIL层的原始定义。HIL组件的例子有TimerMilliC、LedsC 、ActiveMessageC 和DemoSensorC 组件。如果强HIL提供了对某些变量的操作,变量应采用platform-define 类型,如Tinyos2.x 的消息缓冲抽象message_t 。203.2 硬件抽象层以LedsC.nc 文件为例213.2 硬件抽象层LedsC.nc 组件代码如下:configuration LedsC provides interface Leds;im

12、plementation components LedsP, PlatformLedsC;Leds = LedsP;LedsP.Init PlatformLedsC.Led0;LedsP.Led1 - PlatformLedsC.Led1;LedsP.Led2 - PlatformLedsC.Led2;LedsP.Led3 - PlatformLedsC.Led3;223.2 硬件抽象层弱HIL是指基于这类抽象可以编写可移植代码,但移植时必须包含平台的特定行为,虽然这种平台的具体行为可能是由一个平台无关的应用程序执行,但语义上仍需要知道具体的平台情况。弱HIL的好处就是可以编写可移植的使用代码

13、。 233.3 综合硬件组件综合硬件组件主要功能是模拟高级的硬件行为,现有的TinyOS 系统提供了大多数传感网硬件平台和应用领域里都可用到的组件,如定时器组件、传感器组件、消息收发组件以及电源管理组件等,从而把用户和底层硬件隔离开。用户只需开发针对特殊组件和特殊应用需求的少量组件,从而提高了应用软件的开发效率。综合硬件组件包括感知组件、执行组件和通信组件等,它接收上层提供的的命令并向下调用硬件抽象组件执行此命令,它处于高层软件组件与硬件抽象组件之间,是TinyOS 的一个过度层,它的出现方便了平台的移植。 243.4 高层软件组件高层软件组件即应用组件,通过向下层发送命令,并且绑定相应的配件

14、最终实现一个具体应用。应用组件主要有两部分组成:lTinyOS 操作系统或发布平台为用户提供的应用组件(即API组件)。l用户应用程序本身的应用组件。253.5 任务调度在TinyOS 体系结构中,位于最上层的是任务调度,即主组件。TinyOS 的主组件由Main组件组成,该组件由操作系统提供,节点上电后会首先执行该组件中的函数,其主要功能是初始化硬件、启动任务调度器以及执行应用组件的初始化函数。263.5 任务调度在TinyOS 系统中,任务和调度是两个不同的概念 :l任务一般用于对实时性要求不高的应用中,其实质是一种延迟的计算机制。l任务的调度是由调度器来完成。在TinyOS2.x 任务调

15、度器被实现为一个TinyOS 组件。每个任务调度器必须都支持nesC 语法的任务,否则不能通过ncc编译器的编译。273.5 任务调度在TinyOS2.x 中提供了两种类型的任务: l一种是TinyOS 1.x中使用的基本任务模型,将任务调度器表示为组件形式 。l一种是TinyOS 2.x中新出现的任务模型(称为接口任务模型),即将任务表示为接口TaskBasic ,从而可以扩展任务的种类 283.5 任务调度TinyOS 1.x中使用的基本任务模型如下:/任务函数声明post process Task();task void process Task()/任务需要处理的工作num-;if(n

16、um)/再次提交任务post process Task();293.5 任务调度TinyOS 2.x中使用的基本任务模型如下:interface TaskBasic async command error_t postTask();event void runTask();303.5 任务调度在TinyOS 2.x系统中,任务具有以下特点 : l在TinyOS2.x 中,任务队列不会出现多个同样的任务,每个任务在任务队列中都有它自己预留的缓存区。l任务可以被多次提交,但是只有一种情况下是提交失败的,即任务已经被提交,但没有开始执行,此时再次提交该任务将会返回失败。l在TinyOS 2.x中,每个任务都分配了一个任务ID号,此ID号的程度为一个字节,即范围大小为0255。如果一个组件需要多次提交给同一个任务,可以在任务实现代码的最后部分将自身再次提交入队。313.5 任务调度

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号