精品课件-TinyOS操作系统开发技术及实践-第3章
TinyOS操作系统开发技术及实践(西电版)第1章 TinyOS概述_OK

2021/6/30
10
10
第1章 TinyOS概述
版本 0.4.3 0.6.x 1.0 1.1.x
2.0 Beta
2.0.1 2.0.2 2.1.0 2.1.1 2.1.2 2021/6/30
时间 2000 年
2001 2002 年 9 月 2003 年 8 月
2006 年 2 月
2007 年 4 月 2007 年 7 月 2008 年 8 月 2010 年 4 月 2012 年 8 月
表 1-2 TinyOS 的版本变化
说明 通过 向公众开放 支持 mica 平台,期间 UBC 发布了支持 1000mica 平台的 TinyOS 项目, 2002 年 4 月 UCB 与 Intel 研究进行 nesC 语言开发合作 使用 nesC 语言重新编写并改进了 TinyOS nesC 增加部分新功能(如支持并发模型);TinyOS 增加新的 UART 通 信协议等 2.0 Beta1 发布,2.0 与 1.x 不再兼容,后者编写的代码将无法在 2.0 上编译通过;2.0 硬件抽象遵循 3 级结构;改进了任务调度策略;2.0 提 供了比 1.x 更丰富的定时器接口 增加 CC2420 低功耗协议栈;改进组件和接口的资源管理;增加 lib/printf 库;增加 lib/net/lqi 库;修复部分 BUG 重新实现了 CC2420 低功耗协议栈;修复部分 BUG 增加对 IRIS 和 shimmer 平台的支持;增加对 802.15.4 T-Frames 帧的 支持;增加低功耗应用开发指导 增加对 shimmer2、mulle、epic 平台的支持;增加 6LoWPAN/IP 协议 栈;改进 python SDK 增加 RPL 协议栈;增加对 ucmini、ATMega128RFA1、Zolertia Z1 平 台的支持;增加 CoAP 协议栈
OS实习3

实习三文件结构一、实习内容把文件的逻辑结构转换成存储结构,设计便于顺序存取和直接存取的文件存储结构。
二、实习目的文件的结构是指文件中信息的构造方式,通常分成逻辑结构和存储结构两种。
文件的逻辑结构是从用户的观点出发,研究用户概念中的信息组织方式,这时,把文件看成是若干个逻辑记录的集合。
文件的存储结构是指文件中的信息在物理存储介质上的存放方法和组织关系,这时,把文件看成是相关物理块的有序集合。
用户是按逻辑结构来生成和使用文件的,而文件系统必须按照存储设备的物理特性和用户对文件信息的存取方式来管理文件。
所以,文件系统一个主要任务就是要在文件的逻辑结构和存储结构之间建立一个映射。
本实习要求学生模拟设计文件的存储结构,通过实习理解文件的逻辑结构、存储结构、存取方式之间的联系。
三、实习题目第一题:模拟设计MS-DOS操作系统中磁盘文件的存储结构。
[提示]:(1) 当用户对记录式文件采用顺序存以方式时,用户总是依次地访问一个个逻辑记录,即当访问了第I个记录后,下次总是访问第i+1个记录。
所以,当用户采用顺序存取方式访问文件时,只要给出访问要求(读或写)而无需再指出要访问的记录号。
为了适应顺序存取,文件的存储结构可采用顺序文件或链接文件。
由于顺序文件必须占用连续的存储空间,为了提高存储空间的利用率,在用户按逻辑记录顺序访问文件的情况下,一般采用链接文件的结构。
链接文件可以存放在不连续的物理块中,使用链接字(又称指针)来指出文件中各个物理块之间的关联。
在一般情况下,链接文件的第一个物理块号登记在文件目录中,每一块中设置一个链接字,指出链接文件的下一个物理块号,最后一块中的链接字内容为“0”,表示文件结束。
链接文件结构如图3-1。
图3-1 链接文件结构(2) 采用上述的链接文件结构,只有读出一个物理块信息后才能从链接字中得知下一个物理块号。
所以,当用户要在文件中插入一些信息时,文件系统必须多次地请求启动磁盘读出信息才能做插入工作。
精品课件-微型计算机原理及应用(第二版)-第3章

第3章 指令系统及汇编语言程序设计
例如: MOV DX,8000H MOV SS,DX MOV BP,1000H MOV DI,0500H MOV AX,[BP][DI]
在执行基址变址指令时,就是从81500H和81051H单元分 别取一个字节放入AL和AH中。
第3章 指令系统及汇编语言程序设计
可以看到,后面的指令转移的范围覆盖前面一条指令的 转移范围。但后者的目的码为三个字节(前者两个字节),执 行时间也长一些。
第3章 指令系统及汇编语言程序设计
2) 段内间接寻址 在这种寻址方式中,转移地址的段内偏移地址要么存放 在一个16位的寄存器中;要么存放在存储器的两个相邻单元 中。存放偏移地址的寄存器和存储器的地址将按指令码中规 定的寻址方式给出。此时,寻址所得到的不是操作数,而是 转移地址。例如:
第3章 指令系统及汇编语言程序设计
4.寄存器间接寻址 在寄存器间接寻址方式中,操作数存放在存储器中,操 作数的16位段内偏移地址存放在以下4个寄存器SI、DI、BP、 BX之一中。由于上述4个寄存器所默认的段寄存器不同,故又 可以分成两种情况: (1) 若以BX、SI、DI这三个寄存器进行寄存器间接寻址, 则操作数通常放在DS所决定的数据段中。此时数据段寄存器 内容乘16加上SI、DI、BX中的16位段内偏移地址,即得操作 数的地址。
7.基址、变址、相对寻址 这种方式实际上是第6种寻址方式的扩充。操作数的地址 是由基址、变址方式得到的地址再加上由指令指明的8位或16 位的相对偏移地址而得到的。例如:
MOV AX,DISP[BX][SI] 8.隐含寻址 在有些指令的指令码中,不仅包含有操作码信息,而且 还隐含了操作数地址的信息。例如乘法指令MUL的指令码中只 需指明一个乘数的地址,另一个乘数和积的地址是隐含固定 的。再如DAA指令隐含对AL的操作。 这种将操作数的地址隐含在指令操作码中的寻址方式就 称为隐含寻址。
操作系统课件-OS-第三章-第3章-3.+3.2

(2) 作业步(Job Step)。通常,在作业运行期间,每个 作业都必须经过若干个相对独立,又相互关联的顺序加工步 骤才能得到结果,我们把其中的每一个加工步骤称为一个作 业步,各作业步之间存在着相互联系,往往是把上一个作业 步的输出作为下一个作业步的输入。
例如,一个典型的作业可分成三个作业步:
另一种较常用的是基于作业优先级的调度算法,该算法是将外存上 优先级最高的作业优先调入内存;
比较好的一种算法是“响应比高者优先”的调度算法。
2021/3/18
12
在批处理系统中,作业进入系统后,总是先驻留在外存的 后备队列上,因此需要有作业调度的过程,以便将它们分批 地装入内存。
然而在分时系统中,为了做到及时响应,用户通过键盘输 入的命令或数据等都是被直接送入内存的,因而无需再配置 上述的作业调度机制,但也需要有某些限制性措施来限制进 入系统的用户数。即,如果系统尚未饱和,将接纳所有授权 用户,否则,将拒绝接纳。
2021/3/18
7
每当作业进入系统时,系统便为每个作业建立一个JCB,根 据作业类型将它插入相应的后备队列中。
作业调度程序依据一定的调度算法来调度它们,被调度到的 作业将会装入内存。
在作业运行期间,系统就按照JCB中的信息对作业进行控制 。
当一个作业执行结束进入完成状态时,系统负责回收分配给 它的资源,撤消它的作业控制块。
① “编译”作业步,通过执行编译程序对源程序进行编译,产生若 干个目标程序段;
② “连结装配”作业步,将“编译”作业步所产生的若干个目标程 序段装配成可执行的目标程序;
③ “运行”作业步,将可执行的目标程序读入内存并控制其运行。
2021/3/18
5
(3) 作业流。若干个作业进入系统后,被依次存放在外 存上,这便形成了输入的作业流;在操作系统的控制下,逐 个作业进行处理,于是便形成了处理作业流。
第3章4无线传感器网络操作系统TinyOS

TinyOS 2.0的安装与调试
6.安装Graphviz 下载graphviz-1.10.exe文件,双击下载的 文件运行安装程序。 桌面上的cygwin.bat应修改为后来所建目 录里的cygwin.bat。双击即可运行,输入toscheck-env运行,出现如下信息:
$ tos-check-env Path: /opt/msp430/bin 。。。。。。 tos-check-env completed without error. 如上信息表明TinyOS基本安装成功,可以进行下一步的测试。
– 1)能在有限的资源上运行:要求执行模式允许在单一 的协议栈上运行; – 2)允许高度的并发性:要求执行模式能对事件作出快 速的直接响应; – 3)适应硬件升级:要求组件和执行模式能够应对硬件/ 软件的替换; – 4)支持多样化的应用程序:要求能够根据实际需要, 裁减操作系统的服务; – 5)鲁棒性强:要求通过组件间有限的交互渠道,就能 应对各种复杂情况; – 6)支持一系列平台:要求操作系统的服务具有可移植 性。 12
在Windows环境下面直接用winRAR解压即可, 双击解压后产生的文件夹中的setup.exe文件;
19
TinyOS 2.0的安装与调试
平台交叉编译器用于将C代码交叉编译成硬件终端可以运 行的二进制文件。在编译TinyOS应用程序时,会产生针 对特定微控制器芯片的C代码和汇编代码,就需要有相应 平台的编译器支持。 3.安装Atmega 128单片机的AVR工具包和MSP430单 片机工具包 从上下载所需的rpm文件用如下命令 安装即可: cd /tmp rpm –ivh avr-binutils-2.15tinyos-3.cygwin.1386.rpm rpm –qa rpm –ivh avr-gcc-3.4.3-1.cygwin.i386.rpm rpm –ivh avr-libc-1.2.3-1.cygwin.i386.rpm rpm –ivh avaricc-2.4-1.cygwin.i386.rpm
操作系统课件-OS-第三章-第3章-3.3+3.4

2021/3/18
24
2) 时间片大小的确定
在时间片轮转算法中,时间片的大小对系统性能有很大的 影响,如选择很小的时间片将有利于短作业,因为它能较快地 完成,但会频繁地发生中断、进程上下文的切换,从而增加系 统的开销;反之,如选择太长的时间片,使得每个进程都能在 一个时间片内完成,时间片轮转算法便退化为FCFS算法,无法 满足交互式用户的需求。一个较为可取的大小是,时间片略大 于一次典型的交互所需要的时间。这样可使大多数进程在一个 时间片内完成。
静态优先权法简单易行,系统开销小,但不够精确,很 可能出现优先权低的作业(进程)长期没有被调度的情况。
因此,仅在要求不高的系统中才使用静态优先权。
2021/3/18
18
2) 动态优先权
动态优先权是指在创建进程时所赋予的优先权,是可以 随进程的推进或随其等待时间的增加而改变的,以便获得更 好的调度性能。
图3-6 q=1和q=4时进程的周转时间
From the textbook
2021/3/18
27
A
B C D E
0
4
If C Process takes 5 unit time?
7
11 13
17 18
q=4
2021/3/18
28
作业情况
进程名 到达时间
ABC 012
时 间 片 服务时间 4 3 5
2021/3/18
14
1) 非抢占式优先权算法
在这种方式下,系统一旦把处理机分配给就绪队列中优 先权最高的进程后,该进程便一直执行下去,直至完成;或 因发生某事件使该进程放弃处理机时,系统方可再将处理机 重新分配给另一优先权最高的进程。
这种调度算法主要用于批处理系统中;也可用于某些对 实时性要求不严的实时系统中。
精品课件-TinyOS操作系统开发技术及实践-第2章

3
第2章 nesC语言基础
2.2 nesC和C的比较 按照TinyOS官方说法,nesC来源于C,是C语言的一种变种, 所有的C语言中的结构体、函数、甚至指针(建议少使用指针)、数 据类型以及注释格式在nesC中依然是合法的,对于C程序员来说, nesC提出了三个“新概念”: 组件:一组可重用的代码和数据组合,类似于C++中的类。 接口:一组可为其他组件服务的函数和事件集合,是组件之 间交互的界面。 并发执行模型:基于任务和中断的处理机制,定义了组件之 间如何调用,以及中断代码和非中断代码如何交互执行规则。 nesC与C语言的区别主要有程序组成主体、模块之间的调用、命名 空间、编程思想等几方面,下面将对这几个方面进行分析。
第2章 nesC语言基础 第2章 nesC语言基础
2.1 nesC概述 2.2 nesC和C的比较 2.3 nesC程序结构 2.4 接口 2.5 组件 2.6 nesC高级编程 2.7 并发模型 2.8 常用接口和组件 2.9 可视化组件关系图
1
第2章 nesC语言基础
2.1 nesC概述 nesC(Network Embedded System C)是专门为编写TinyOS以 及进行TinyOS编写应用程序而发明的一种语言,用nesC而不是C 语言编写TinyOS(TinyOS最初是由C和汇编编写的)主要基于以下 两点: nesC在语法上支持TinyOS需要的并发执行模型。 nesC编写的源码为编译器的优化提供了可能,最终可以缩小 可执行代码尺寸。 因此,使用nesC生成的程序,更加适合无线传感网络节点。 由于nesC的学习有点难度,建议从C和nesC的区别入手,辅之以 示例,逐渐掌握其编程规则。
*/
25
第2章 nesC语言基础
tinyos

基于T iny os 的传感器网络程序实例开发张西红,角阳飞,高彦彦(军械工程学院,河北石家庄050003)摘 要:T iny os 操作系统采用的轻量级线程技术、两层调度方式、事件驱动模式、主动消息通信技术及组件化编程等有效地提高了传感器节点CPU 的使用率,在T iny os 中采用NesC 语言进行应用程序开发,有很多问题值得研究和探讨。
从NesC 语言基于组件化编程的特点入手,讨论基于T iny os 的应用程序的开发过程。
分析了编程语言NesC 的应用程序结构,结合实例给出完整的T iny os 中用T ossim 模拟器模拟应用程序的过程,说明了应用程序开发的步骤及运行方法。
关键词:无线传感器网络;T iny os ;NesC ;程序开发中图分类号:T N711 文献标识码:A 文章编号:1003-3114(2009)01-55-3R esearch on Program Development B ased on Tinyosin Wireless Sensor N etw orksZH ANG X i 2hong ,J I AO Y ang 2fei ,G AO Y an 2yan(Ordnance Engineering C ollege ,Shijiazhuang Hebei 050003,China )Abstract :T iny os operating system has effectively increased the CPU utilization rate of sens or nodes by using the lightweight thread technology ,tw o 2layer schedule m ode ,event 2driven pattern ,active message communication technology ,com ponent programming and s o on.There are still many problems w orth further research and discussion while developing applications based on NesC language in T iny os.S tarting from the characteristic of NesC based on com ponent programming ,the paper discusses the process of program development based on T iny os ,and analyses the structure of the programs based on programming language NesC.C ombined with the piratical exam ple ,the paper finally gives a com plete procedure simulating programs with T issim simulator ,which explains the development steps of the application and the way it w orks.K ey w ords :wireless sens or netw orks ;T iny os ;NesC ;program development基金项目:国家自然科学基金项目(60672143)收稿日期:2008-10-19作者简介:张西红(1964-),男,博士,副教授,硕士生导师。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ P0_1 = 1; }
async command void Port01.clr()
{ P0_1 = 0; }
async command void Port01.toggle() { P0_1 ^= 1; }
16
第3章 TinyOS体系结构
async command void Port01.makeInput() { P0SEL &= ~_BV(1); P0DIR &= ~_BV(1);}
interface GeneralIO as Port15;
interface GeneralIO as Port16;
interface GeneralIO as Port17;
/*P2有关的接口*/
interface GeneralIO as Port20;
interface GeneralIO as Port21;
此文件使用“get”和“set”命令直接操作寄存器,为上层 提供软硬件的接口。HPL组件简化了对硬件的操作,无须使用隐 藏的宏和寄存器(其定义位于编译库的头文件中),用户可以通过 常见的接口访问硬件。硬件表示层的接口组件一般具有以下两个 特点:
除了自动操作常用的命令外,HPL层没有提供任何实质性的 硬件抽象。它隐藏了最依赖于同一类别的不同HPL硬件模块。比 如,在同一硬件平台中不同的微控制器,虽然它们具有相同的功 能,但其使用的寄存器名称和中断向量却稍有不同。通过一致的 接口,HPL组件可以将这些细小的差别隐藏,从而增强更高层抽 象资源的独立型。
第3章 TinyOS体系结构
/*P1有关的接口*/
interface GeneralIO as Port10;
interface GeneralIO as Port11;
interface GeneralIO as Port12;
interface GeneralIO as Port13;
interface GeneralIO as Port14;
第3章 TinyOS体系结构 第3章 TinyOS体系结构
3.1 概述 3.2 硬件抽象组件 3.3 综合硬件组件 3.4 高层软件组件 3.5 任务调度 3.6 系统启动顺序 3.7 跨平台应用 小结
1
第3章 TinyOS体系结构
3.1 概述 TinyOS操作系统采用组件式结构,是一个基于事件的系统。 系统本身提供了一系列的组件供用户调用,其体系结构如图3-1 所示。 TinyOS体系结构由下到上将一系列组件分为以下4大类: 硬件抽象组件:将物理硬件映射到TinyOS的组件模型。 综合硬件组件:模拟高级的硬件行为,如感知组件、执行组 件和通信组件。 高层软件组件:包含应用组件,其主要功能是向底层组件发 出命令,底层组件向高层组件报告事件。 任务调度组件:即主组件,负责对整个TinyOS进行任务的调 度,它包括一个任务调度器。
…
…
…
/* P2_4 寄存器的操作 */
async command bool Port24.get()
{ return P2_4; }
async command void Port24.set()
{ P2_4 = 1; }
async command void Port24.clr()
{ P2_4 = 0; }
async command void Port24.makeOutput() { P2SEL &= ~_BV(4); P2DIR |= _BV(4);}
async command bool Port24.isOutput() { return P2DIR&_BV(4); }
} 17
第3章 TinyOS体系结构
硬件抽象架构允许HAL组件持有可用于资源仲裁和控制的状 态变量。
由于无线传感器网络对执行效率要求较高,HAL层的硬件抽 象必须适合于具体的设备类型和平台特征。
HAL接口并不隐藏通用模型的特殊硬件功能,而是提供特定 的功能和最好的抽象来简化应用程序的开发,同时保证资源的利 用效率,例如通常使用特定领域的硬件抽象模型,如Alarm、ADC 或EEPROM等,而不是对所有设备都使用单一的统一的硬件抽象模 型。
接口层。3层的作用描述如下: 硬件表示层与硬件的寄存器和中断密切相关,不同芯片的硬
件平台的硬件表示层是不同的,这一层与平台的移植息息相关。 硬件适配层带有丰富的硬件相关的接口,有助于提高效率;
不同平台的硬件适配层有可能不同。 硬件接口层提供与平台无关的接口,便于代码的移植。这一
层与平台无关,上层可以调用这一层的接口实现对下层的控制。
2
第3章 TinyOS体系结构
任务调度组件 高层软件组件
综合硬件组件
硬件抽象组件
主组件(包括任务调度)
应用组件
感知组件
执行组件
通信组件
硬件抽象组件
图3-1 TinyOS体系结构
3
第3章 TinyOS体系结构 任务调度器具有两层结构,第一层维护着命令和事件,主要
是在硬件中断发生时对组件的状态进行处理;第二层维护着任务, 负责各种计算,只有当组件状态维护工作完成后,任务才能被调 度。
12
第3章 TinyOS体系结构
图3-4 HplCC2530GeneralIOC.nc文件
13
第3章 TinyOS体系结构
【代码3-1】 HplCC2530GeneralIOC. nc #include "cc2530.h" module HplCC2530GeneralIOC {
provides {
interface GeneralIO as Port22;
interface GeneralIO as Port23;
interface GeneralIO as Port24;
}
15
第3章 TinyOS体系结构
implementation
{ /* P0_0 寄存器的操作 */
async command bool Port00.get()
7
第3章 TinyOS体系结构
硬件抽象架构
平台无关的硬件接口
硬件接口层
平台相关的应用程序
硬件适配层
软、硬件分割
硬件表示层 硬件
图3-2 硬件抽象架构
8
第3章 TinyOS体系结构 3.2.2 硬件表示层
硬件表示层(Hardware Presentation Layer,以下简称HPL) 由一系列组件组成,该层组件直接位于硬件与软件的接口之间。 该层组件访问硬件的一般方法是通过内存或I/O映射,并且硬件 可以通过中断信号来请求服务。
提高代码的可重用性和可移植性。 实现效率和性能的优化。 本节将介绍硬件抽象架构及其分层结构。
6
第3章 TinyOS体系结构
3.2.1 硬件抽象架构 TinyOS 2.x提出了一个具有3层结构的硬件抽象架构,并结
合其组件特点形成一个高效的组织结构,如图3-2所示。 硬件抽象架构的3层分别是硬件表示层、硬件适配层和硬件
19
第3章 TinyOS体系结构 这些特定的模型为了实现对硬件抽象的访问,HAL组件应当
使用丰富的、定制的接口,而不是通过重载命令隐藏所有功能的 标准接口。这样的设计方式使得编译时对接口错误的检查效率更 高。
async command void Port00.makeInput() { P0SEL &= ~_BV(0); P0DIR &= ~_BV(0);}
async command bool Port00.isInput() { return ~(P0DIR&_BV(0)); }
async command void Port00.makeOutput() { P0SEL &= ~_BV(0); P0DIR |= _BV(0); }
async command bool Port01.isInput() { return ~(P0DIR&_BV(1)); }
async command void Port01.makeOutput() { P0SEL &= ~_BV(1); P0DIR |= _BV(1); }
async command bool Port01.isOutput() { return P0DIR&_BV(1); }
async command void Port24.toggle() { P2_4 ^= 1; }
async command void Port24.makeInput() { P2SEL &= ~_BV(4); P2DIR &= ~_BV(4);}
async command bool Port24.isInput() { return ~(P2DIR&_BV(4)); }
TinyOS调度模型主要有以下几个特点: 任务单线程运行,且运行结束后,只分配单个任务栈,这对 内存受限的系统很有利。 没有进程管理概念,对任务按简单的FIFO队列进行调度。 FIFO的任务调度策略具有能耗敏感性,当任务队列为空时, 处理器进入休眠,随后由外部中断事件唤醒CPU进行任务调度。
4
第3章 TinyOS体系结构 两级的调度结构,可以实现优先执行少量同事件相关的处理,
10
第3章 TinyOS体系结构
图3-3 芯片目录
11
第3章 TinyOS体系结构 以“tos/chips/cc2530/”目录下的
HplCC2530GeneralIOC.nc文件为例,HplCC2530 GeneralIOC.nc 文件是针对CC2530的I/O的实现,打开此文件如图3-4所示。
用户只需简单地重新绑定HPL组件,而不必重新编写代码就 可以在不同的USART模块之间进行切换。