Lesson1---TinyOS入门_第1页
Lesson1---TinyOS入门_第2页
Lesson1---TinyOS入门_第3页
Lesson1---TinyOS入门_第4页
Lesson1---TinyOS入门_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 Lesson1TinyOS入门 介绍TinyOS系统的一些基本概念 组件 components 模块 modules 配件 configurations 和接口 interfaces 如何编译和安装一个TinyOS程序在一个mote 尘埃 节点上 以Blink为例介绍一个简单的应用程序是如何组建起来的 运行环境 TinyOS2 1 Cygwin WindowsXP Cygwin在Windows下提供一个类似Linux的环境 2 一 编译和安装 作为一开始的学习 先来编译一个非常简单的程序Blink 若没有硬件节点 可以用TinyOS的TOSSIM仿真平台进行编译运行 编译TinyOS程序使用make命令 TinyOS系统有一个强大的扩展性很强的make系统 位于tinyos 2 x support make目录中 先运行如下命令检查环境是否正确配置 tos check env 如有错误警告 根据提示检查环境搭建的步骤 3 一 编译和安装 接下来要检查TinyOS系统是否正常启用 printenvMAKERULES Make命令编译TinyOS应用程序的方法是 在应用程序的文件夹下运行 make platform 如makemicaz TOSSIM仿真编译则为 make platform sim 如makemicazsim 4 1 1确认nesc语言的ncc编译器的版本 nesC语言是TinyOS使用的语言 而ncc是对gcc的扩展 专门用来编译nesC应用程序 可输入whichncc来查看系统调用的是哪个ncc编译器 会跳出该ncc的文件位置 再输入该文件目录的 version选项命令 得到其版本号 5 1 2在mica系列节点上下载程序 micaz节点 串口编程辅助开发板mib510 makemicazinstall xmib510 serialport makemicazreinstall xmib510 serialport其中 x是分配给节点的全网唯一的身份标识码 serialport是串口设备的名字 在Windows下 如果当前串口是COMn 那使用 dev ttySn 1作为设备名字 reinstall命令告诉make系统下载当前已编译的二进制文件到节点上 它跳过了编译的过程 输入 makeclean 可以清除所有已经编译完成的二进制文件 然后输入 makemicazinstall 重新编译文件 然后再下载一次 makemicazinstall 3mib510 dev ttyS5 6 如果程序下载成功将会如下图所示 如果没有请重新编译下载 7 二 组件和接口 TinyOS程序代码是用nesC语言编写的 这是C语言扩展了一些组件和并发特征后的语言 一个nesC语言编写的程序由一个或多个组件构成或连接而成 一个组件 conponent 由两部分组成 一个是规范说明 包含要用接口的名字 另一部分是它们的实现 一个组件可以提供接口 interface 也可以使用接口 提供的接口描述了该组件提供给上一层调用者的功能 而使用的接口则表示了该组件本身工作时需要的功能 8 二 组件和接口 接口是双向的 提供或使用 接口指定了一组命令 command 其职能由接口的提供者实现 还指定了一组事件 event 其职能由该接口的使用者实现 也就是说 提供了接口的组件必须实现该接口的命令函数 而使用了某接口的组件必须实现该接口的事件函数 如果一个组件调用了 call 的一个接口命令 必须实现该接口的事件 一个组件可以使用 use 或提供 provide 多个接口或者同一接口的多个实例 9 二 组件和接口 概述TinyOS操作系统 库和程序服务程序是用nesC写的 nesC是一种用于开发组件式结构程序的语言 nesC是一种C语法风格的语言 但是支持TinyOS的并发模型 以及组织 命名和连接组件成为嵌入式网络系统的机制 nesC应用程序由有良好定义的双向接口的组件构建 nesC把组件化 模块化的思想和TinyOS基于事件驱动的执行模型结合起来 规范nesC应用程序由一个或多个组件连接而成 一个组件可以提供或使用接口 组件中command接口由组件本身实现 组件中event接口由调用者实现 接口是双向的 调用command接口必须实现其event接口 10 2 1配件和模块 组件有两种 配件和模块 模块 module 提供一个或多个接口的实现 配件 configuration 把其他的组件装配起来 连接组件使用的接口到其提供者 每个nesC应用程序都必须有且只有一个顶层配件 top levelconfiguration 连接内部组件 之所以区别设计模块与配件 是为了让系统设计者在构建应用程序的时候可以脱离现有的实现 例如 设计者可以提供配件 只是简单地把一个或多个模块连接起来 而不涉及其中具体的工作 同样地 另一个开发者负责提供一组模块库 这些模块可以普遍使用到众多应用中 11 三 例子程序Blink Blink是一个基本的应用程序 它通过开启定时器来实现周期性地切换LED灯 其文件位置为 opt tinyos 2 x apps Blink 编译下载到节点上 可以看到 该应用程序在节点的3个LED灯上显示了一个计数器 它只是简单的以4Hz的频率开关LED0 以2Hz开关LED1 以1HZ开关LED2 其效果就是 每两秒3个LED显示了二进制计数从0到7 Blink程序由两个文件组成 模块文件 BlinkC nc 和配件文件 BlinkAppC nc 记住 所有程序都需要一个顶层配件 通常是以应用程序的名字命名 BlinkAppC就是Blink程序的配件 也是nesC编译器产生可执行文件的源头 而BlinkC则提供Blink程序的逻辑实现 BlinkAppC是用来连接BlinkC模块和Blink所需的其他功能组件 12 3 1源文件命名的一些注意 虽然可以给应用程序中的模块和配件取任意的名称 但为了简便 建议在编写代码时使用如上表所示的统一的命名格式 13 3 2BlinkAppC nc configurationBlinkAppC 这里一般由uses和provides从句来说明使用到的和提供的接口 除了顶层配件 模块和配件多可以使用和提供接口 Implementation 实现部分 componentsMainC BlinkC LedsC BlinkC是编写的模块componentsnewTimerMilliC asTimer0 as命名别名方便识别componentsnewTimerMilliC asTimer1 同一组件不同实例componentsnewTimerMilliC asTimer2 components指定了这个配件用到的组件componentsBlinkC MainC Boot BlinkC Boot MainC BootBlinkC Timer0 Timer0 BlinkC Timer0 Timer0 Timer0BlinkC Timer1 Timer1 是连接的意思BlinkC Timer2 Timer2 是一种包含两个内部规范元素的连接BlinkC Leds LedsC BlinkC Leds LedsC Leds 也就是把负责实现应用部分的模块BlinkC与系统的组件库连接起来 记住 BlinkAppC和BlinkC组件是不一样的 更确切的说 BlinkAppC是由Blinkc组件连同mainc ledsc和3个timer定时器一起组成的 14 3 3BlinkC nc moduleBlinkC usesinterfaceTimerasTimer0 定义使用到的接口 Timer1 Timer2的定义同上usesinterfaceLeds usesinterfaceBoot BlinkC可以调用这些它使用的接口的任何命令 但必须实现这些接口的所有事件event implementation eventvoidBoot booted callTimer0 startPeriodic 250 250ms周期性触发callTimer1 startPeriodic 500 callTimer2 startPeriodic 1000 eventvoidTimer0 fired dbg BlinkC Timer0fired s n sim time string callLeds led0Toggle led0灯切换灭 亮状态 Timer1 Timer2的fired 事件函数同上 15 3 4接口连接 nesC使用箭头 来绑定一个接口到另一个接口 但一定要是同一类接口 例如A B意为A连接到B A是接口的使用者 user 而B是接口的提供者 provider 完整的表达式应该为 A a B b这意味着 组件A的接口a连接到组件B的接口b 当一个组件使用或者提供同一个接口的多个不同实例时 设置别名就非常有必要了 如BlinkC中的timer0 timer1 timer2 16 3 4接口连接 当一个组件只含有一个接口的时候 就可以省略接口的名字了 如BlinAppC中Blinkc leds ledsC 就省略了LedsC组件中包含的接口leds 其等同于 Blinkc leds ledsC leds 由于BlinkC组件中仅仅含有一个leds的接口实例 那也同样等同于 Blinkc ledsC leds 同样地 TimerMilliC组件只提供了单一的timer接口实例 也不必包含在下面的连接里 BlinkC Timer0 Timer0连接的箭头是可以对称倒反的 如Timer0Timer0为了方便阅读 大多数连接的箭头还是从左到右的 17 3 5MainC nc include hardware h configurationMainC providesinterfaceBoot 提供接口BootusesinterfaceInitasSoftwareInit implementation componentsPlatformC RealMainP TinySchedulerC RealMainP Scheduler TinySchedulerC RealMainP PlatformInit PlatformC SoftwareInit RealMainP SoftwareInit Boot RealMainP RealMainP使用SoftwareInit接口 提供Boot接口 这里的 是一种包含一个外部规范元素的连接 这种连接可以有效地使两个规范元素等价 如S1 S2 但是这种等价必须满足下面的条件之一 S1内部 S2外部 或者相反 且S1和S2是同时被提供的或同时被使用的 S1和S2都是外部的 而且一个是被提供 一个是被使用 18 3 6LedsC TimerMilliC configurationLedsC providesinterfaceLeds implementation genericconfigurationTimerMilliC providesinterfaceTimer implementation 19 四 图形化文档说明 精心设计的TinyOS系统通常有很多层的配置 每一层都简单地提取了抽象概念 以很少的可执行代码来实现复杂的配置 要想到达底层的模块 或者操纵各个层 使用文本编辑器是很费力的 幸好 TinyOS和nesC有一个名为nesdoc的辅助工具 它可以自动地从源代码产生说明文档 除了注释之外 nesdoc还可以显示配件的结构与组成 nesdoc的使用方法 在应用程序的目录下输入 make platform docs 比如 makemicazdocs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论