TinyOS入门
- 格式:ppt
- 大小:786.00 KB
- 文档页数:22
入门-tinyos编程思想除非特别说明,所有的程序都是基于tinyos-1.3的,并在VM 模拟Win xp 32位下用cygwin调试运行。
思想:Tinyos使用的是一种特殊的,面向组件的编程思想,这种思想和用惯了面向对象的编程思想的我来说,非常不习惯。
Tinyos和nesC为什么难学?因为他没有正常的教科书,不像C, C++,Java 一样有专门的书或者资料,告诉你需要实现什么功能,要去用到什么类(这里是组件),要去用什么接口,要去用什么函数。
Tinyos完全没有这些东西,什么都是让你自己去摸索和实践。
所以你有太多的不习惯:1. 你不习惯NesC程序的基本组成是Component,每个Component是一个*.nc文件。
这里不像Java,大家都知道java当中的类是有继承关系,有子类超类等等。
你只需要知道一些简单的类,就可以自己扩展学习,即使有没见过的类,也可以找到很详细的介绍和使用方法。
NesC中没有类的概念,自然也就没有子类超类,没有继承,也就是说,如果你知道有这么一个Component,你就可以用这个Component 可以完成一定的工作。
但是如果你不知道这个Component呢,尤其是某些底层的Component 那么嘿嘿~~!!要么你像我一样,去逼自己看懂系统提供那些的Component,要么自己写一个。
可问题你现在连最简单的blink 程序都看不懂,更何况自己写了。
所以每个用NesC的初学者都和瞎子差不多,说白了,你就是什么都不会的。
你的C还有java经验都根本没用。
当然,你会if 还有for语句,这是你在学习tinyos中唯一比买菜大妈强的地方。
2. 你不习惯NesC程序的中Component的使用方法。
NesC程序中采用了一种所谓的wiring的机制来指明component与component之间的关系。
3. 你不习惯NesC程序的中组件的层次结构,也就是接口,方法,属性,函数的关系。
TinyOS 2.x 编程入门教程Version 1.02010/12/17目录前言 (1)第1章编程环境的建立 (2)1.1安装J AVA 1.6JDK (2)1.2安装CWGWIN(WINDOW ONLY) (2)1.3安装编译器 (3)1.4安装T INY OS工具 (3)1.5设置环境变量 (4)1.6安装G RAPHVIZ (4)1.7检测软件安装情况 (4)1.8USB串口驱动下载及安装 (5)第2章TINYOS简介 (7)2.1NES C语言简介 (7)2.1.1组件(components) (7)2.1.2并发模型 (11)2.2常用MAKE命令简介 (12)2.3应用举例:B LINK ---T INY OS编程的“H ELLO W ORLD”程序 (12)2.3.1Blink配件 (13)2.3.2BlinkC模块 (14)2.3.3事件evenst和命令commands (16)2.3.4编译Blink应用程序 (17)2.3.5安装Blink程序到Telosb节点并运行 (17)2.4下载程序出错故障排除 (18)2.5小结 (20)第3章TELOSB硬件平台常用可编程器件和对应的TINYOS组件介绍 (21)3.1L ED (22)3.1.1Telosb硬件平台上的Led器件展示 (22)3.1.2TinyOS中Led编程组件介绍 (22)3.2传感器 (23)3.2.1Telosb硬件平台上的传感器展示 (23)3.2.2TinyOS中传感器编程组件介绍 (24)3.3串口 (25)3.3.1Telosb硬件平台上的串口展示 (25)3.3.2TinyOS中串口编程组件介绍 (26)3.4R ADIO (26)3.4.1Telosb硬件平台上的Radio相关器件展示 (26)3.4.2TinyOS中Radio编程组件介绍 (27)3.5小结 (27)第4章用事件驱动方式从传感器获取数据 (27)4.1模块实现 (28)4.2ADC (30)第5章TINYOS任务及应用举例 (32)5.1任务的创建和调度 (32)5.2举例:S ENSE T ASK应用程序 (33)5.3小结 (33)第6章TINYOS串口编程 (34)6.1T EST S ERIAL应用程序 (34)6.2串口助手:PC上显示从串口读取的数据 (38)6.3T ELOSB从串口读取数据 (39)6.4O SCILLOSCOPE应用程序——数据感知 (41)6.5B ASE S TATION应用程序 (45)6.6小结 (51)附录1 TINYOS命名约定 (52)附录2 NESC语言特有关键字 (54)前言随着传感器技术、微机电系统、现代网络、无线通信、低功耗等技术的飞速发展,推动了无线传感器网络 (WSN:wireless sensor network) 的产生和发展。
第一篇基础知识TinyOS体系结构(1) 组件模型module & configurationTinyOS 是基于构件的微操作系统,采用事件驱动模型,有效的提高了系统的运行效率以及能源合理利用。
TinyOS 采用nesC 语言编写,其应用程序由一个或多个组件连接而成,而组件可以提供和使用接口,组件必须实现其所提供的command 接口,并且必须实现其连接组件中申明的事件event 接口。
接口是程序的实体,实现程序的各功能模块,分为command 和event ,command 接口由组件本身实现,而event 接口则由调用者实现,值得注意的是,接口是双向的,调用command 接口时必须实现其event 接口。
组件又可以细分为模块module 和配件。
模块亦可分为2个部分,其一,首先申明提供以及使用的接口,如module BlinkC { } 其二,在implementation 中模块包含各接口所提供的行为(方法),也包含仅供本模块内部使用的函数,以及申明本模块所具有的事件signal ,以及实现其连接或使用的event 。
implementation{uint8_t counter = 0;void ledctl() {call Leds.set(counter);}event void Boot.booted() {} event void Timer0.fired(){ledctl();}}配件configuration 也可以分为两个部分,和module 一样,第一部分是申明可以提供以及使用的接口。
第二部分implementation 中首先列出与其相连接模块的名称,使用components 标注连接的模块,然后对本配件提供的以及与其相对应模块使用以及提供的接口进行配线,如下例:{}implementation{BlinkC -> MainC.Boot; /////或者写作BlinkC.Boot -> MainC.Boot;BlinkC.Timer<TMilli> ->TimerMilliC;BlinkC.Leds -> LedsC;}在TinyOS 中存在很多中间配件,这些配件的特点是没有与之相对应的模块,其作用就是根据不同的条件将上层的连接转接到不同的模块上,如下例所示generic configuration AMSenderC(am_id_t AMId) { provides {interface AMSend; interface Packet;interface AMPacket;interface PacketAcknowledgements as Acks;}}implementation {#if defined(LOW_POWER_LISTENING)#else #endifAMSend = SenderC;Packet = SenderC;AMPacket = SenderC;Acks = SenderC;}接口文件相当于C 程序中头文件对函数的声明,接口文件一般放置于提供该接口的模块的同一目录下的interface 文件夹中,也可以放在TinyOS 根目录下的interface 目录中,其命名必须与模块中所提供接口名字相同,注意不是接口的实例化名称或nickname 。
TinyOS/NesC程序的基本结构和入手写法(教程lesson 1 blink)和大家一样,我是按照 ../tinyos/cygwin/opt/tinyos-1.x/doc/tutorial 中的8个lesson进行操作和学习的。
虽然很痛苦,可是还真没有什么别的更好的方法来学习这门奇怪的嵌入式语言。
相信绝大多数同学在面对NesC的时候,最大的问题就是不知道从哪里下手,和自己到底要写些什么。
以下的步骤,至少可以让你知道,你要使用NesC去做什么。
第一步,我们要根据实际情况去选择使用什么组件。
以编写blink为例:首先我们需要main, main是程序开始的组件,是每个的TinyOS 程序(application)都必须的组件。
或者可以说是NesC程序的入口,类似于C语言的main(),“Main”调用其他的 component以实现程序的功能。
第二,需要一个来控制程序逻辑的组件,或者说具体实现程序逻辑功能的组件。
一般表达程序的逻辑思路,用和配置文件一样的名字,但是多了一个M,表示是module文件,本例中就是BlinkM,也就是我们上一篇当中提到的module文件所对应的组件。
第三,因为程序中用到了LED,所以需要系统提供的ledc。
没办法,这个是只有多看系统lib才行。
第四,因为程序需要时间控制,所以用到系统提供的timer(或者是用户定义的singletimer,其实用户定义的singletimer依然是调用了系统的timer. 后面会附上修改好去掉simpletimer的blink代码,需要的同学自己看)总结,没有任何好方法,只有对系统熟悉,才能完成对底层的控制,必须去了解和学习那些底层的interface,不然是没有办法学习nesC的。
第二步,选择合适的组件之后就需要编写顶层配置文件(configuration)从逻辑上来说,当你选定了组件之后,就需要顶层配置文件来wiring组件们,让他们协同工作,以完成你需要的程序功能。
1.5传感感应程序实例/* Sense Application */Sense是一个简单的感应实例程序。
她定期(periodically)采样传感器的数据,然后显示读取数据的低位,显示在节点的leds灯上。
查看tinyos-2.x/doc/html/tutorial/lesson5.html作为一个在TinyOS系统上传感器的普通教程。
tinyos-2.x/doc/html/tutorial/lesson5.htmlSensing详细说明文档这节课程将介绍TinyOS中的传感器数据采集(acquisition)。
我们将展示(demonstrate)两个传感器程序:一个简单的Sense应用程序用来定期(periodically)的采集传感器数据,然后显示将数据显示在LEDs灯上。
而一个更复杂(sophisticated)的应用Oscilloscope,这个节点定期(periodically)广播他们读取的传感器数据到基站节点。
就像过先前的课程中所描述,用Mote-PC进行串行通信,基站将读取的传感器数据转发到PC上,然后在专用的(dedicated)用户图形界面中进行可视化(visualized)。
目录TinyOS官方教程翻译............................................................................. 错误!未定义书签。
目录 . (1)介绍 (2)Sense应用程序 (2)1.DemoSensorC组件 (5)2.运行Sense应用程序 (5)Oscilloscope应用程序 (6)1.运行Oscilloscope应用程序 (7)运行Java 图形用户界面(Graphical User Interface) (7)相关文档资料 (8)介绍传感是传感器网络不可分割的一部分。
TinyOS中传感是在语法连接模数转换器(analog-to-digital converters【ADCs】):TinyOS应用,例如Oscilloscope或者Sense都是用模数转换器和模数控制器接口来收集传感器数据。
TinyOS启动顺序介绍1、概述在tinyos启动顺序中,有一系列调用语句规定。
Tinyos早些版本使用接口“StdControl”来进行系统初始化并启动所需的软件系统。
在多个硬件平台上实践发现“StdControl”接口不能满足要求,因为其只能提供同步接口。
另外,“StdControl”只在启动时绑定初始化概念,同时包括能源管理和服务控制。
TinyOS 2.x可解决这些问题,通过将StdControl分成三个独立的接口:初始化、启动和停止组件、通知mote已经启动。
本文记录了tinyos启动顺序和其语义原由。
2、TinyOS 1.x Boot Sequence大多mote平台中,TinyOS 1.x启动顺序是一样的(TOSSIM启动顺序完全不同,因为是PC中的项目)。
RealMain模块实现main()。
module RealMain{uses{command result_t hardwareInit();interface StdControl;interface Pot;}}Main()函数是nesC和C混合。
int main()__attribute__((C,spontaneous)){call hardwareInit();call Pot.init(10);TOSH_sched_init();call StdControl.init();call StdControl.start();__nesc_enable_interrupt();while(1){TOSH_run_task();}}存在好几个问题。
这些调用只是用于旧平台上:Pot组件涉及到mica可变电位器计,用于控制转发能量,在其他平台是stub component调用--TOSH sched init and TOSH run task–都是C函数,可在其他组件中实现,通过include命令自动包括其所在文件。
从nesC组件模型分离依赖这些函数比平常的tinyos更困难。
TinyOS学习笔记1-TinyOS安装1、Ubuntu系统的安装安装TinyOS可以在Windows中利用Cygwin进行安装,经过测试在XP中可以正确安装,但是安装的步骤过于麻烦,可以参考官方网站的安装步骤。
在Win7中安装后有问题,不能正确编译。
因此最好使用Linux系统来安装TinyOS,安装过程简单。
安装Ubuntu系统1.Ubuntu的官方网站下载iso镜像,我安装的是10.04版本2.可以有两种方式进行Ubuntu安装。
(1)传统方式安装:在系统中划分出空闲分区,利用U盘制作启动盘,官网有,可下载。
重启系统选择U盘启动。
进行安装。
(2)wubi方式进行安装:以文件形式进行安装,下载wubi,将镜像与wubi放于同一文件夹。
点击wubi进行安装。
3.更新Ubuntu更行Ubuntu时需要注意,更新时grub不更新。
利用wubi安装,我选择了更新grub,重新启动系统出现错误。
解决方法如下:1.另一台电脑,到Ubuntu网站下载镜像,安装到U盘中,制作启动盘。
2.开机,选择从U盘启动,在Boot里设置不好使,像我的ASUS A8,开机按ESC,选择U盘启动。
3.看到Ubuntu的欢迎界面,选择第一项,进入U盘中的Ubuntu系统。
4.在终端中,输入sudo apt-get install lilosudo lilo -M /dev/SD a mbr5.重启系统,问题解决4.使用root登录系统2、在Ubuntu系统下安装TinyOS我安装的时TinyOS2.1.1,安装过程参考TinOS官网的安装指导,但有问题,具体步骤如下:1)在系统的“/etc/apt/sources.list”中,添加如下代码:deb /tinyo ... lt;distribution> main<distribution>可以为(edgy,feisty,gutsy,hardy,jaunty,k ARM ic,lucid)例如 deb /tinyos/dists/ubuntu hardy main以上的源可能有问题,在安装是提示tinyos-2.1.1依赖的包找不到或无法安装,更新源如下解决此问题:deb /tinyos/dists/ubuntu hardy maindeb /tinyos oneiric main2)更新知识库,打开终端,输入sudo apt-get update3)安装TinyOSsudo apt-get install tinyos提示可选的tinyos的版本,选择最新的版本2.1.1sudo apt-get install tinyos-2.1.14)设置环境变量在~/.bashrc或者~/.profile中加入如下代码#Sourcing the tinyos environment variable setup scriptsource /opt/tinyos-2.1.1/tinyos.sh可用如下方法打开~/.bashrc或者~/.profilegedit ~/.bashrc添加成功后需要重新启动终端5)测试是否安装成功cd /opt/tinyos-2.1.1/apps/Blink/(若当前文件夹没有权限创建文件,将Blink复制到当前用户的目录进行运行)make telosb显示如下则安装成功:mkdir -p build/telosbcompiling BlinkAppC to a telosb binaryncc -obuild/telosb/main.exe -Os-O -mdisable-hwmul -fnesc-separator=__ -Wall -Wshadow -Wnesc-all-target=telosb -fnesc-cfile=build/telosb/app.c -board=-DDEFINED_TOS_AM_GROUP=0x22-DIDENT_APPNAME=/"BlinkAppC/"-DIDENT_USERNAME=/"root/"-DIDENT_HOSTNAME=/"ubuntu/"-DIDENT_USERHASH=0xa3473ba6L-DIDENT_TIMESTAMP=0x4c566efbL-DIDENT_UIDHASH=0xd972ea96L BlinkAppC.nc -lmcompiled BlinkAppC to build/telosb/main.exe2648 bytes in ROM54 bytes in RAMMSP430-objcopy --output-target=ihexbuild/telosb/main.exe build/telosb/main.ihexwriting TOS imageTinyOS学习笔记2-TinyOS的IDE-Yeti23.测试TinyOS中的Toosim∙make micaz sim∙提示找不到python2.5∙查看本机python的版本,我的版本为2.6∙进入/opt/tinyos-2.1.1/support/make/sim.extra∙修改python的版本PYTHON_VERSION=2.6∙重新make micazsim∙提示*** Successfullybuilt micaz TOSSIM library.则可运行tossim。