TinyOS入门

合集下载

入门-tinyos编程思想

入门-tinyos编程思想

入门-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入门共16页文档

TinyOS入门共16页文档
• Open source, open developer community • tinyos • Tutorials:
– docs.tinyos/tinywiki/index.php/TinyOS_Tutorial s
2
安装
• 多种安装方法,参看 docs.tinyos/tinywiki/index.php/Gettin g_started_%282.1%29
TinyOS入门(1)
胡四泉

What?
• An operating system for low power, embedded, wireless devices
– Wireless sensor networks (WSNs) – Sensor-actuator networks – Embedded robotics
• 在本实习中,在WindowsXP上用 VMPlayer运行XubunTOS虚拟机
安装启动步骤
• 安装VMPlayer • 解压xubuntos-2.1-vm.tar.gz到E盘根目录,确认
E:\Xubuntos 2.1目录下包含虚拟机文件Xubuntos 2.1.vmx • 运行VMPlayer • 在VMPlayer中打开Xubuntos 2.1.vmx • 如果系统询问你虚拟机是move还是copy来的,选择 copy; • 如果内存不足,系统建议你reduce memory请accept • 等待Xubuntos启动完成 • 输入用户名xubuntos 密码tinyos • 使用Ctrl+Alt+Enter组合键在虚拟机与WindowsXP间切 换
观察程序结构
• make telosb docs
Thanks! Go Ahead! Good Luck!

无线传感器网络操作系统TinyOS

无线传感器网络操作系统TinyOS
5
现有的WSN操作系统
• 当前已有多个有代表性的开源的无线 传感器网络操作系统:
Tiny OS 2.1:美国加州大学伯克利分校开发 Mantis OS 0.9.5 (Multimodal Networks of Insitu Sensors) :美国克罗拉多大学开发 SOS 1.7:美国加州大学洛杉矶分校开发
– 命令(command):接口的提供者必须实现它们; – 事件(event):接口的使用者必须实现它们 。
19
组件,接口,命令和事件
• 接口的特点:
Provides未必一定有组件使用,但uses一定要有人提供,否则编 译会提示出错。在动态组件配置语言中uses也可以动态配置。 接口可以连接多个同样的接口,叫做多扇入/扇出。 一个module可以同时提供一组相同的接口,又称参数化接口,表 明该Module可提供多份同类资源,能够同时给多个组件分享。
13
TinyOS的技术特点-3
分阶段作业(Split-Phase Operations)
TinyOS没有提供任何阻塞操作,为了让一个耗时较长的操 作尽快完成,一般来说都是将对这个操作的请求和这个操 作的完成分开来实现,以便获得较高的执行效率。
主动消息通信(Active Message)
每一个消息都维护一个应用层的处理程序。当节点收到消 息后,就会把消息中的数据作为参数,传递给应用层的处 理程序,由其完成消息数据的解析、计算处理或发送响应 消息等工作。
9
TinyOS的设计理念
• 由于WSN的特殊性,研究人员在设计TinyOS系统 时就提出以下几个原则:
– 1)能在有限的资源上运行:要求执行模式允许在单一 的协议栈上运行; – 2)允许高度的并发性:要求执行模式能对事件作出快 速的直接响应; – 3)适应硬件升级:要求组件和执行模式能够应对硬件/ 软件的替换; – 4)支持多样化的应用程序:要求能够根据实际需要, 裁减操作系统的服务; – 5)鲁棒性强:要求通过组件间有限的交互渠道,就能 应对各种复杂情况; – 6)支持一系列平台:要求操作系统的服务具有可移植 性。 10

TinyOS 2.x 入门教程

TinyOS 2.x 入门教程

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中文使用完全手册

TinyOS中文使用完全手册
第六章 使用 TOSSIM 模拟 TINYOS 应用程序 ...............................................................................44
1 TOSSIM 简介 ...................................................................................................44 2 建立和运行应用程序.......................................................................................44 3 增加调试语句...................................................................................................45
第四章 用于处理应用数据的任务 ......................................................................................................34
1 任务的创建和调度..........................................................................................34 2 SENSETASK 应用程序.......................................................................................34 3 练习...................................................................................................................35

TinyOS学习笔记讲解

TinyOS学习笔记讲解

第一篇基础知识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 。

第3篇TinyOSNesC程序的基本结构和入手写法(教程lesson 1 blink)

第3篇TinyOSNesC程序的基本结构和入手写法(教程lesson 1 blink)

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组件们,让他们协同工作,以完成你需要的程序功能。

TinyOS教程——1.5-传感

TinyOS教程——1.5-传感

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系统启动顺序

Tinyos系统启动顺序

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

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。

TinyOS-nesC 编程参考手册

TinyOS-nesC 编程参考手册

TinyOS/nesC编程参考手册第一部分序言阅读本书的前提:1.你对于C/C++/JAVA有一定的了解,并且理解指针。

2.你已经学过本科级别的操作系统课程,并且理解并发、中断和抢占。

第一章链接与命名空间在TinyOS上编程可能是比较具有挑战的,因为它需要使用一种新的语言,nesC。

但是,nesC 与 C非常相似。

这种实现新系统或协议的学习曲线并不陡峭。

相反,把新的代码与现有的相合并才是困难的开始。

nesC与C最大的不同之处在于其链接模型。

这种挑战和复杂性体现在将一组构件在使用的应用程序中组合起来,而非软件构件的书写上。

为了理解为什么这往往是困难的,接下来我们将重温链接是如何在C/C++/JAVA中工作的,以及这些语言中它是如何影响的代码的良好结构。

然后,我们会测试在nesC中链接是如何工作的,这样,区别就是显而易见的了。

我们的目的并非从系统的角度去看符号表和虚拟函数的链接而是从一个程序员的角度来看。

1.1CC语言有一个独立的全局命名空间给函数和变量使用(为了方便,以下我们把两者都称之为变量)。

一个C的源文件可以声明一个变量以以下的三种方式:声明、定义以及引用。

声明语句表示变量存在,并给出他的属性信息。

一个变量可以被多次声明,举个例子,以下是一份POSIX系统的基础声明:int read(intfd, void* buf, size_t count);声明与实现不同,它只是陈述变量在哪里存在,以及其他代码可以引用它。

调用函数,分配地址,或者载入全部的引用。

比如,以下代码表示变量result为val的引用:result = read(fd, &val, 1);C的编译器一般认为变量在引用前被声明。

当然也有一些例外(一些编译器发出警告,如果你引用一个未声明的函数,并希望他们在稍后声明),但引用的未声明的变量是通常是糟糕的C程序。

定义是最后一种声明的方式。

声明表示变量存在,引用使用变量,而定义实际创建它。

第09章-TinyOS操作系统

第09章-TinyOS操作系统

TinyOS的内存管理采用完全静态分配内存的策略。虽然nesC语言 也支持指针操作,但TinyOS不采用动态分配内存策略。 首先,动态内存分配影响系统的稳定性,而完全的静态分配内存策 略增强了TinyOS系统的稳定性。 其次,静态分配内存简化了TinyOS管理内存的难度,提高了程序 运行的效率。
第三,静态分配内存提高了TinyOS对内存的使用率。动态内存分 配策略会因为内存碎片而使内存使用率降低。
1、协作式与抢占式OS
在操作系统的发展过程中,先后有2种形式的多 任务管理机制,即协作式与抢占式。 协作式:如果任务切换的时机完全取决于正在运 行的任务,那么这样的操作系统就是协作式多任务操 作系统。即任务执行时的权利比操作系统还大,只有 等正在运行的任务完成后,才会将控制权交给操作系 统,此时才能执行下一个任务。一旦某个任务运行出 错,则导致整个系统挂起(Pending)。 抢占式:如果任务优先运行的决定权取决于操作 系统,而且即使有一个任务死掉,而系统仍能正常工 作,那么这样的操作系统就是抢占式多任务操作系统 。
(4)任务和事件并发模式(Tasks And Events ConcurrencyModel)。任务之 间是平等的,即在执行时是按顺序先后来的,而不能相互抢占。事件用在对 于时间的要求很严格的应用中,而且它可以优先于任务执行。 (5)分段执行(Split-Phase Operations)。在TinyOS中由于任务之间不能互 相抢占执行,所以TinyOS没有提供任何阻塞操作,为了让一个耗时较长的操 作尽快完成,一般来说都是将对这个操作的需求和这个操作的完成分开来实 现,以便获得较高的执行效率。 (6)主动消息模式(active message)。每一个消息都维护一个应用层和处理 器,当目标节点收到这个消息后,就会把消息中的数据作为参数,传递给应 用层的处理器进行处理。应用层处理器一般完成消息数据的解包、计算处理 或发送响应消息等工作。 (7)基于可重用组件的体系结构,单一任务栈,内核非常简单,甚至在 严格意义上说,称不上内核,没有进程管理和虚拟存储。 这些特点使得TinyOS非常适合WSN的需求,所以它得到了广泛应用。

Tinyos操作系统简介

Tinyos操作系统简介

Tinyos操作系统简介Tinyos简介最近看了篇关于TinyOS简介的文章,摘录出来保存下,介绍tinyos编程入门的资料不少,但从操作系统的角度分析tinyos是有必要的,毕竟TinyOS做为无线传感网络操作系统中最重要的一种,也是最常用的一种,分析它的实现机制有助于以后改进针对无线传感网络的操作系统,也是嵌入式操作系统的一类。

An open-source operating system designed for wireless embedded sensor network. More specifically, it is designed to support the concurrency intensive operations required by networked sensors with minimal hardware requirements.TinyOS Features• No Kernel: Direct hardware manipulation.• No Process Management: Only one process on the fly.• No Virtual Memory: Single linear physical address space.• No S/w Signal or Exception: Function call instead.• No User Interface, power constrained.• Unusually application specific H/w and S/w.• Multiple flows, concurrency intensive bursts.• Extremely passive vigilance (power saving).• Tightly coupled with the application.• Simulator: TOSSIM, PowerTOSSIM• Written in “nesC” Language, a dialect of the …C? language.TinyOS uses multi-hop routing instead of point-to-point connections to savetransmission power. Route discovery is done by 2-hop broadcast and topologydiscovery is based on shortest path from each node to the base station.• The paradigm for network transmissions in TinyOS is active messaging. Messages contain a handler address and on arrival this handler is called.• TinyOS Architecture• Component Based Architecture: enables rapid innovation and implementation while minimizing code size as required by the severe memory constraints inherent in sensor networks.• Small footprint: fits in 178 Bytes of memory.• Event based instead of threaded architecture.start and stop are commands.fired is a event invoked by Timer.The interface specifies: Timer must implement startand stop, Application must implement fired.o Propagates events in time it takes to copy 1.25 Bytes.o Switches context in the time to copy 6 Bytes ofMemory.• Radio and Clock have interrupts.• Non-blocking/Non-preemptive Scheduling: Tasks will not preempts other tasks and run in FIFO order but only interrupts and associated events can preempt tasks.Toavoid blocking scenarios, events and commands are expected to do only state transmissions and leave complex computations to tasks thatcan be preempted if necessary. This simple concurrency model istypically sufficient for I/O centric applications, but its difficulty with CPU-heavy applications has led to severalproposals for incorporating threads into the OS.• TinyOS has a Single Stack: TinyOS uses a simple queue with length7 and a two level scheduling. Therefore, all I/O operations that last longer than a few hundredmicroseconds are asynchronous and have a callback. A TinyOS component can post a task, which the OS will schedule to run later.• To support larger computations, TinyOS provides t asks, which are similar to a Deferred Procedure Call and interrupt handler bottom halves. Latest version of TinyOS has numerous improvements such as: Safe TinyOS , a compile-time optionthat lets us incorporate run-time memory safety checks into oour application, TOSThreads , a threading library that runs on top of a standard TinyOS core etc.。

面向TelosB:TinyOS编程快速上手_ ver-1

面向TelosB:TinyOS编程快速上手_ ver-1

面向 TelosB: : TinyOS 编程快速上手信息技术研究所老段总结、整理面向 TelosB:TinyOS 编程快速上手(by: 老段) Ver: 1.0第一章 简介及环境安装1.1 TinyOS 简介TinyOS 是 UC Berkeley(加州大学伯克利分校)开发的开放源代码操作系统,专为嵌入式无 线传感网络设计,操作系统基于构件(component-based)的架构使得快速的更新成为可能,而这 又减小了受传感网络存储器限制的代码长度。

1.2 TelosB 简介TelosB 全称是 CrossBow(柯思博)公司 Telos 系列节点的 Rev. B。

在无线传感器网络中,每 一个实体元素叫做传感器节点。

TelosB 就是其中一种节点。

如右图所示, 节点大小约有 U 盘尺寸, 上面是电路板,下面是电池槽。

具体的参数如下: 技术起源 CPU 通信芯片 通信电波 MAC 协议 外部闪存 天线 操作系统 写入程序 供电 温湿度感知部件 光感知部件 LED 加州大学伯克利分校 8MHz TI MSP430, 10KB RAM CC2420 2.4GHz,250Kbps 高速数据传输 IEEE 802.15.4 / ZigBee 1M Flash 内置,集成在电路板内 TinyOS 1.1 或更高 通过 USB 端口写入 两节 AAA 电池(5 号电池) Sensirion Sht11 Hamamatsu S1087(S1087-1) 3 个,分别为 0(Red), 1(Green), 2(Blue)1.3 Windows 下 TinyOS2.x 的安装1.3.1 安装 JDKjdk-1_5_0_04-windows-i586-p.exe面向 TelosB:TinyOS 编程快速上手(by: 老段) Ver: 1.0面向 TelosB:TinyOS 编程快速上手(by: 老段) Ver: 1.0设置 windows 中 3 个环境变量(JAVA_HOME、CLASSPATH、PATH) JAVA_HOME 设置成 C:\Program Files\Java\jdk1.5.0_04,注意和上图中安装的目录有所差异。

tinyos使用PPT课件

tinyos使用PPT课件
• $ java net.tinyos.tools.Listen -comm
serial@COM1:telosb(空格)>a.txt
• $cd /opt/tinyos-2.x/apps • $cp -R Blink BlinkSingle • $ cd BlinkSingle //在apps文件夹下新建
//在cygwin中列出telosb所
有的components和interface,且在tinyos-
2.x/doc/nesdoc/index.html文件中产生components和
interface的列表,以后要找什么components和interface可
以从列表中找,单框的是module,双框的是configuration。
==错误提示:
The toscomm JNI library was not found.
Check that your tinyos-tools package is installed and try
rerunning tos-install-jni.
Aborting.
解决: copy getenv.dll and toscomm.dll from C:\cygwin\lib\tinyos to your
• typedef nx_struct BlinkToRadioMsg {
• nx_uint16_t nodeid;
• nx_uint16_t counter;
• } BlinkToRadioMsg;
-
7
• You compile TinyOS applications with the program “make”(在platform文件夹下)

tinyOS编程教程快速入门

tinyOS编程教程快速入门

Conclusion
Sensor Hardware Constraints

Lower Power Limited memory Slow CPU Size (Small) Limited hardware parallelisms Communication using radio Low-bandwidth Short range

So why do we need a new OS?
Traditional OS
Huge
! Multi-threaded architecture =>large memory I/O model Kernel and user space separation Typically no energy constraints Ample available resources
Commands/Events/Tasks



Commands Should be non-blocking i.e. take parameters start the processing and return to app; postpone time-consuming work by posting a task Can call commands on other components Events Can call commands, signal other events, post tasks but cannot be signal-ed by commands Pre-empt tasks, not vice-versa Tasks FIFO scheduling Non pre-emptable by other task, pre-emtable by events Used to perform computationally intensive work Can be posted by commands and/or events

第3讲-第二章 TinyOS入门

第3讲-第二章 TinyOS入门
configuration BlinkAppC { // 这里一般由uses 和 provides 从句来说明使用到的和提供的接口,除了顶 层配件,模块和配件多可以使用和提供接口 } 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 -> 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 是 由 Blinkc 组件连同 mainc ,ledsc 和3个 timer定时器一起组成的。 } 22
• 规范
– nesC应用程序由一个或多个组件连接而成。 – 一个组件可以提供或使用接口:

tinyos课程设计

tinyos课程设计

tinyos课程设计一、教学目标本课程旨在通过学习TinyOS操作系统,使学生掌握嵌入式系统的原理和开发方法,培养学生的实践能力和创新精神。

具体目标如下:1.知识目标:了解TinyOS操作系统的基本概念、架构和原理;掌握TinyOS中的关键模块和编程方法;了解嵌入式系统在实际应用中的优势和局限。

2.技能目标:能够使用TinyOS开发环境进行程序设计;能够进行TinyOS操作系统的配置、编译和调试;具备嵌入式系统的设计和开发能力。

3.情感态度价值观目标:培养学生的团队协作精神和自主学习能力;增强学生对嵌入式系统领域的兴趣和好奇心;引导学生关注嵌入式系统在社会发展和产业应用中的重要性。

二、教学内容本课程的教学内容主要包括以下几个部分:1.TinyOS操作系统的基本概念和架构;2.TinyOS中的关键模块和编程方法,如调度器、事件驱动机制、存储管理等;3.嵌入式系统的设计方法和开发流程;4.实际应用案例分析,了解嵌入式系统在各个领域的应用。

教学大纲安排如下:第1周:TinyOS概述和架构介绍第2周:TinyOS编程基础和关键模块第3周:嵌入式系统设计方法和流程第4周:实际应用案例分析三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式:1.讲授法:用于讲解基本概念、原理和方法;2.案例分析法:通过分析实际应用案例,使学生更好地理解嵌入式系统的应用;3.实验法:让学生动手实践,掌握TinyOS操作系统的开发方法和技巧;4.讨论法:鼓励学生积极参与课堂讨论,培养学生的思考能力和团队协作精神。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《TinyOS操作系统原理与应用》;2.参考书:《嵌入式系统设计原理与应用》;3.多媒体资料:教学PPT、视频教程等;4.实验设备:嵌入式开发板、编程器等。

通过本课程的学习,希望学生能够掌握TinyOS操作系统的基本原理和开发方法,具备嵌入式系统的设计和开发能力,为今后的学习和职业发展打下坚实基础。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如有错误警告,根据提示检查环境搭建的步骤。
2
一、编译和安装
• 接下来要检查TinyOS系统是否正常启用。 • $ printenv MAKERULES • Make命令编译TinyOS应用程序的方法是: 在应用程序的文件夹下运行: • make [platform] 。如 make micaz。 • TOSSIM仿真编译则为: • make [platform] sim 。如 make micaz sim。
Blink
3.5 MainC.nc
#include "hardware.h" configuration MainC { provides interface Boot; //提供接口Boot uses interface Init as SoftwareInit; } implementation { components PlatformC, RealMainP, TinySchedulerC; RealMainP.Scheduler -> TinySchedulerC; RealMainP.PlatformInit -> PlatformC; SoftwareInit = RealMainP.SoftwareInit; Boot = RealMainP; //RealMainP使用SoftwareInit接口,提供Boot接口 }
3
1.1 确认 nesc语言的ncc编译器的版本
• nesC语言是TinyOS使用的语言,而ncc是对gcc的 扩展,专门用来编译nesC应用程序。 • 可输入 which ncc来查看系统调用的是哪个ncc编译 器,会跳出该ncc的文件位置,再输入该文件目录 的 –version选项命令,得到其版本号。
• 运行环境:TinyOS 2.1 + Cygwin (Windows XP) • Cygwin在Windows下提供一个类似Linux的环境
1
一、编译和安装
• 作为一开始的学习,先来编译一个非常简 单的程序 Blink。若没有硬件节点,可以用 TinyOS的TOSSIM仿真平台进行编译运行。 • 编译TinyOS程序使用make命令,TinyOS系 统有一个强大的扩展性很强的make 系统, 位于 tinyos-2.x/support/make目录中。 • 先运行如下命令检查环境是否正确配置。 • $ tos-check-env
10
三、例子程序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所需的其他功能组件。
Lesson1 TinyOS入门
• 介绍TinyOS系统的一些基本概念:组件 (components),模块(modules),配件 (configurations)和接口( interfaces)。 • 如何编译和安装一个TinyOS程序在一个mote (尘埃)节点上。 • 以Blink为例介绍一个简单的应用程序是如何组 建起来的。
3.3 BlinkC.nc
module BlinkC () { uses interface Timer<TMilli> as Timer0; //定义使用到的接口 … … //Timer1、Timer2的定义同上 uses interface Leds; uses interface Boot; //BlinkC 可以调用这些它使用的接口的任何命令,但必须 实现这些接口的所有事件 event } implementation { event void Boot.booted() { call Timer0.startPeriodic( 250 ); //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()事 源文件命名的一些注意
文件名 文件类型
Foo.nc
Foo.h FooC.nc FooP.nc
接口文件
头文件 公共组件(配件或模块) 私有组件(配件或模块)
虽然可以给应用程序中的模块和配件取任意的名称, 但为了简便,建议在编写代码时使用如上表所示的统一的 命名格式。
12
3.2 BlinkAppC.nc
4
1.2 在mica系列节点上下载程序
• • • • micaz 节点+串口编程辅助开发板mib510。 $ make micaz install.x mib510,serialport $ make micaz reinstall.x mib510,serialport 其中,x是分配给节点的全网唯一的身份标识码; serialport是串口设备的名字,在Windows下,如果 当前串口是COMn,那使用 /dev/ttySn-1 作为设备 名字。 • reinstall命令告诉make 系统下载当前已编译的二进 制文件到节点上,它跳过了编译的过程。 • 输入 “make clean ”可以清除所有已经编译完成的 二进制文件,然后输入 “make micaz install ”重新 编译文件,然后再下载一次。 • $ make micaz install.3 mib510,/dev/ttyS5
5
• 如果程序下载成功将会如下图所示,如果没 有请重新编译下载。
6
二、组件和接口
• TinyOS程序代码是用nesC语言编写的,这是C语 言扩展了一些组件和并发特征后的语言。 • 一个nesC语言编写的程序由一个或多个组件构成 或连接而成。 • 一个组件(conponent)由两部分组成:一个是规 范说明,包含要用接口的名字;另一部分是它们 的实现。 • 一个组件可以提供接口(interface),也可以使用 接口。提供的接口描述了该组件提供给上一层调 用者的功能,而使用的接口则表示了该组件本身 工作时需要的功能。
15
3.4 接口连接
• 当一个组件只含有一个接口的时候,就可以省略 接口的名字了。如 BlinAppC中Blinkc.leds – > ledsC 。 就省略了 LedsC组件中包含的接口leds。 其等同于:Blinkc.leds – > ledsC.leds 。 • 由于 BlinkC组件中仅仅含有一个leds的接口实例, 那也同样等同于:Blinkc – > ledsC.leds 。 • 同样地,TimerMilliC 组件只提供了单一的 timer 接口实例,也不必包含在下面的连接里: BlinkC.Timer0 -> Timer0 • 连接的箭头是 可以对称倒反的。如 Timer0 <- BlinkC.Timer0; //等同于BlinkC.Timer0 -> Timer0为了方便阅读,大 多数连接的箭头还是 从左到右的。 16
configuration BlinkAppC { // 这里一般由uses 和 provides 从句来说明使用到的和提供的接口,除了顶 层配件,模块和配件多可以使用和提供接口 } 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 -> 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 是 由 Blinkc 组件连同 mainc ,ledsc 和3个 timer定时器一起组成的。 } 13
7
二、组件和接口
• 接口是双向的:提供或使用。 • 接口指定了一组命令(command),其职能由接口 的提供者实现。还指定了一组事件( event),其 职能由该接口的使用者实现。 • 也就是说,提供了接口的组件必须实现该接口的命 令函数;而使用了某接口的组件必须实现该接口的 事件函数。
相关文档
最新文档