版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,Lesson1 TinyOS入门,介绍TinyOS系统的一些基本概念:组件(components),模块(modules),配件 (configurations)和接口( interfaces)。 如何编译和安装一个TinyOS程序在一个mote(尘埃)节点上。 以Blink为例介绍一个简单的应用程序是如何组建起来的。 运行环境:TinyOS 2.1 + Cygwin (Windows XP) Cygwin在Windows下提供一个类似Linux的环境,2,一、编译和安装,作为一开始的学习,先来编译一个非常简单的程序 Blink。若没有硬件节点,可以用TinyOS的TOSSIM仿真平台进行
2、编译运行。 编译TinyOS程序使用make命令,TinyOS系统有一个强大的扩展性很强的make 系统,位于 tinyos-2.x/support/make目录中。 先运行如下命令检查环境是否正确配置。 $ tos-check-env,如有错误警告,根据提示检查环境搭建的步骤。,3,一、编译和安装,接下来要检查TinyOS系统是否正常启用。 $ printenv MAKERULES,Make命令编译TinyOS应用程序的方法是:在应用程序的文件夹下运行: make platform 。如 make micaz。 TOSSIM仿真编译则为: make platform sim 。如 make
3、micaz sim。,4,1.1 确认 nesc语言的ncc编译器的版本,nesC语言是TinyOS使用的语言,而ncc是对gcc的扩展,专门用来编译nesC应用程序。 可输入 which ncc来查看系统调用的是哪个ncc编译器,会跳出该ncc的文件位置,再输入该文件目录的 version选项命令,得到其版本号。,5,1.2 在mica系列节点上下载程序,micaz 节点+串口编程辅助开发板mib510。 $ make micaz install.x mib510,serialport $ make micaz reinstall.x mib510,serialport 其中,x是分配给节点
4、的全网唯一的身份标识码;serialport是串口设备的名字,在Windows下,如果当前串口是COMn,那使用 /dev/ttySn-1 作为设备名字。 reinstall命令告诉make 系统下载当前已编译的二进制文件到节点上,它跳过了编译的过程。 输入 “make clean ”可以清除所有已经编译完成的二进制文件,然后输入 “make micaz install ”重新编译文件,然后再下载一次。 $ make micaz install.3 mib510,/dev/ttyS5,6,如果程序下载成功将会如下图所示,如果没有请重新编译下载。,7,二、组件和接口,TinyOS程序代码是用ne
5、sC语言编写的,这是C语言扩展了一些组件和并发特征后的语言。 一个nesC语言编写的程序由一个或多个组件构成或连接而成。 一个组件(conponent)由两部分组成:一个是规范说明,包含要用接口的名字;另一部分是它们的实现。 一个组件可以提供接口(interface),也可以使用接口。提供的接口描述了该组件提供给上一层调用者的功能,而使用的接口则表示了该组件本身工作时需要的功能。,8,二、组件和接口,接口是双向的:提供或使用。 接口指定了一组命令(command),其职能由接口的提供者实现。还指定了一组事件( event),其职能由该接口的使用者实现。 也就是说,提供了接口的组件必须实现该接口
6、的命令函数;而使用了某接口的组件必须实现该接口的事件函数。 如果一个组件调用了( call)的一个接口命令 ,必须实现该接口的事件。 一个组件可以使用( use)或提供( provide)多个接口或者同一接口的多个实例。,9,二、组件和接口,概述 TinyOS操作系统、库和程序服务程序是用nesC写的。 nesC是一种用于开发组件式结构程序的语言。 nesC是一种C语法风格的语言,但是支持TinyOS的并发模型,以及组织、命名和连接组件成为嵌入式网络系统的机制。 nesC应用程序由有良好定义的双向接口的组件构建; nesC把组件化/模块化的思想和TinyOS基于事件驱动的执行模型结合起来。 规
7、范 nesC应用程序由一个或多个组件连接而成。 一个组件可以提供或使用接口: 组件中command接口由组件本身实现; 组件中event接口由调用者实现; 接口是双向的,调用command接口必须实现其event接口。,10,2.1 配件和模块,组件有两种:配件和模块。 模块(module):提供一个或多个接口的实现。 配件(configuration):把其他的组件装配起来,连接组件使用的接口到其提供者。 每个nesC应用程序都必须有且只有一个顶层配件(top-level configuration)连接内部组件。 之所以区别设计模块与配件,是为了让系统设计者在构建应用程序的时候可以脱离现有
8、的实现。例如:设计者可以提供配件,只是简单地把一个或多个模块连接起来,而不涉及其中具体的工作。同样地,另一个开发者负责提供一组模块库,这些模块可以普遍使用到众多应用中。,11,三、例子程序Blink,Blink是一个基本的应用程序,它通过开启定时器来实现周期性地切换LED灯。 其文件位置为/opt/tinyos-2.x/apps/Blink。 编译下载到节点上,可以看到,该应用程序在节点的3个LED灯上显示了一个计数器。它只是简单的以4Hz的频率开关LED0,以2Hz开关LED1,以1HZ开关LED2。其效果就是: 每两秒3个LED显示了二进制计数从0到7。 Blink程序由两个文件组成:模块
9、文件(BlinkC.nc)和 配件文件(BlinkAppC.nc)。记住:所有程序都需要一个顶层配件,通常是以应用程序的名字命名。BlinkAppC就是Blink程序的配件,也是nesC编译器产生可执行文件的源头。而BlinkC则提供Blink程序的逻辑实现。BlinkAppC是用来连接BlinkC模块和Blink所需的其他功能组件。,12,3.1 源文件命名的一些注意,虽然可以给应用程序中的模块和配件取任意的名称,但为了简便,建议在编写代码时使用如上表所示的统一的命名格式。,13,3.2 BlinkAppC.nc,configuration BlinkAppC / 这里一般由uses 和 p
10、rovides 从句来说明使用到的和提供的接口,除了顶层配件,模块和配件多可以使用和提供接口 Implementation /实现部分 components MainC, BlinkC, LedsC; /BlinkC是编写的模块 components new TimerMilliC() as Timer0; /as命名别名方便识别 components new TimerMilliC() as Timer1; /同一组件不同实例 components new TimerMilliC() as Timer2; /components指定了这个配件用到的组件components BlinkC -
11、MainC.Boot;/ BlinkC.Boot - MainC.Boot BlinkC.Timer0 - Timer0;/BlinkC.Timer0 - Timer0.Timer0 BlinkC.Timer1 - Timer1;/ -是连接的意思 BlinkC.Timer2 - Timer2;/ -是一种包含两个内部规范元素的连接 BlinkC.Leds - LedsC;/BlinkC.Leds - LedsC.Leds /也就是把负责实现应用部分的模块BlinkC与系统的组件库连接起来 /记住, BlinkAppC 和 BlinkC 组件是不一样的。更确切的说, BlinkAppC 是由
12、Blinkc 组件连同 mainc ,ledsc 和3个 timer定时器一起组成的。 ,14,3.3 BlinkC.nc,module BlinkC () uses interface Timer as Timer0; /定义使用到的接口 /Timer1、Timer2的定义同上 uses interface Leds; uses interface Boot; /BlinkC 可以调用这些它使用的接口的任何命令,但必须实现这些接口的所有事件 event implementation event void Boot.booted() call Timer0.startPeriodic( 250
13、 ); /250ms周期性触发 call Timer1.startPeriodic( 500 ); call Timer2.startPeriodic( 1000 ); event void Timer0.fired() dbg(“BlinkC”, “Timer 0 fired %s.n”, sim_time_string(); call Leds.led0Toggle();/led0灯切换灭-亮状态 /Timer1、Timer2的fired()事件函数同上 ,15,3.4 接口连接,nesC使用 箭头 来绑定一个接口到另一个接口,但一定要是同一类接口。 例如 A - B 意为 A连接到B。
14、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组件
15、中仅仅含有一个leds的接口实例,那也同样等同于:Blinkc ledsC.leds 。 同样地,TimerMilliC 组件只提供了单一的 timer 接口实例,也不必包含在下面的连接里:BlinkC.Timer0 - Timer0 连接的箭头是 可以对称倒反的。如 Timer0 Timer0为了方便阅读,大多数连接的箭头还是 从左到右的。,17,3.5 MainC.nc,#include hardware.h configuration MainC provides interface Boot;/提供接口Boot uses interface Init as SoftwareInit;
16、implementation components PlatformC, RealMainP, TinySchedulerC; RealMainP.Scheduler - TinySchedulerC; RealMainP.PlatformInit - PlatformC; SoftwareInit = RealMainP.SoftwareInit; Boot = RealMainP; /RealMainP使用SoftwareInit接口,提供Boot接口 ,这里的“=”是一种包含一个外部规范元素的连接。这种连接可以有效地使两个规范元素等价,如S1=S2,但是这种等价必须满足下面的条件之一:
17、S1内部,S2外部(或者相反),且S1和S2是同时被提供的或同时被使用的。 S1和S2都是外部的,而且一个是被提供,一个是被使用。,18,3.6 LedsC implementation . generic configuration TimerMilliC() provides interface Timer; implementation ,19,四、图形化文档说明,精心设计的TinyOS 系统通常有很多层的配置,每一层都简单地提取了抽象概念,以很少的可执行代码来实现复杂的配置。 要想到达底层的模块,或者操纵各个层,使用文本编辑器是很费力的。幸好,TinyOS 和nesC有一个名为 nesdoc的辅助工具, 它可以自动地从源代码产生说明文档。除了注释之外, nesdoc 还可以显示配件的结构与组成。 nesdoc的使用方法:在应用程序的目录下输入“make platform docs”,比如“make micaz docs” 生成的文档保存在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财会岗事业单位面试专项训练含答案
- 化工分离过程(第15讲)3.4.4化学吸收
- 企业家庭日亲子活动策划方案
- 《某地产策划流程》课件
- 2027年陕西省榆林市中考数学最后冲刺浓缩卷(含答案解析)
- 2027届河南省三门峡市初中数学毕业考试模拟冲刺卷(含答案解析)
- 大学美术油画色彩技法测试试卷及答案
- 服务业职业发展规划范文
- 小学道德与法治情景试题及答案
- 内控合规职业发展路径
- 工程项目安全质量交底记录表模板
- 2026年院前急救题库(得分题)及参考答案详解【夺分金卷】
- 景观环境模型制作
- 2026年糖尿病专科护士培训计划
- 汽车出口业务介绍
- 转轮除湿机选型设计计算书
- ISO9001-2026质量管理体系“气候变化”要求专项实施操作指导材料(雷泽佳编制-2026A1)
- 2026年团员入团知识测试题(各地真题)
- 船舶新能源技术
- 2025国家基层糖尿病防治管理指南解读课件
- 林木居间协议合同范本
评论
0/150
提交评论