入门-tinyos编程思想

合集下载

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!

第5章(503)

第5章(503)

11
第5章 TinyOS应用开发
用户接口组件 SerialActiveMessageC UartStream StdControl SerialActiveMessageC Receive Send
分派组件 SerialDispatcherC ReceiveBytePacket SendBytePacket 协议组件 SerialP SerialFrameComm 编码/装帧组件 HdlcTranslateC UartStream 原始组件 PlatformSerialC StdControl
5
第5章 TinyOS应用开发 【代码5-1】 HplCC2530UartP.nc module HplCC2530UartP { //串口初始化接口 provides interface Init as Uart0Init; //TX控制接口 provides interface StdControl as Uart0TxControl; //RX控制接口 provides interface StdControl as Uart0RxControl; //串口发送接收设置接口 provides interface HplCC2530Uart as HplUart0; uses interface McuPowerState; }
TinyOS的编程方法:包括在TinyOS开发过程中所使用的
与平台相关的硬件资源的编程方法以及与平台相关的应用编程 方法。 TinyOS特殊的实例编程:包括基于CC2530的串口通信、 无线射频的点对点通信和CC2530芯片ADC的信息采集。
yOS编程方法
} }
implementation
{ uint8_t m_send_buf[100]; { strcpy(m_send_buf,"qing dao dong he xin xi "); //通过UartStream.send可以发送字节数据 call UartStream.send(m_send_buf, strlen(m_send_buf)); }

关于TinyOS编程的详细说明说明书

关于TinyOS编程的详细说明说明书

Programmable transistor potentiometer allows variable Built-in antenna provides 1-4 feet transmission rangeLight Sensor 51-pin-connector Temperature Se nsorAccelerometerSerial Port ConnectionParallel Port ConnectionProcessor/Radio Board51-Pins ConnectorsWhat is TinyOS?w Small, open source, energy efficient operating system designed by UC Berkeley w It was designed specifically for networked sensorsw Event-based systemEach system module is designed to operate bycontinually responding to incoming eventsMore TinyOS stuffw Two-level schedulingEvent handlers deal with hardware interrupts Tasksl Execution mechanism provided for long runningcomputationsl Runs to completion in backgroundl Can be interrupted by low-level system eventsl Task scheduling performed by simple FIFO queueMore TinyOS stuffw ComponentsAllows application developers to combineindependent components into an applicationspecific configurationA specialized language, NESC, was developed toexpress a component graph and the command/event interfaces between componentsThe TinyOS web sitew /tos/index.html DownloadSupportPublicationsHardware DesignsRelated WorkThe TinyOS download & install /tos/download.htmlw Installation packages available for:Windows 2000/XPl Choice of Installshield or Manual installationLinuxw Installation includes other software (Cygwin, JDK, avr tools, etc.)The TinyOS directoryw TinyOS subdirectories:appscontribdoctoolstosSpecification of aTinyOS programw A nesC application consists of one ormore components linked together to form an executablew A component provides and uses interfaces. These interfaces are the only point of access to the component and are bi-directionalw An interface declares a set of functions called commands that the interface provider must implement and another set of functions called events that the interface user must implementSpecification of aTinyOS programw For a component to call the commands in an interface, it must implement the events of that interfacew A single component may use or provide multiple interfaces and multiple instances of the same interfaceImplementation of aTinyOS programw There are two types of components in nesC: modules and configurationsw Modules provide application code, implementing one or more interfacew Configurations are used to assemble other components together, connecting interfaces used by components to interfaces provided by others. This is called wiringImplementation of aTinyOS programw Every nesC application is described by a top-level configuration that wires together the components insidew nesC uses the filename extension ".nc" for all source files --interfaces, modules, and configurationsWhat is NesC?w Network Embedded Systems Cw C-like syntax supporting TinyOSw Reference manual online:/papers/nesc-ref.pdfTinyOS Tutorialsw Provide sample programs with explanation of code w Tutorials included with TinyOS installationw Most up-to-date version of tutorials are online: /tos/tinyos-1.x/doc/tutorial/index.htmlCompiling and uploadingw To compile a TinyOS application, you must first enter the directory of the appw Type: make <platform>w Valid platforms include: mica, mica2, mica2dot w To compile and install: make <platform> install w To assign ID #: make <platform> install.X where X is the node ID (0, 1, 2, …)More compiling and uploading w To install a program that has already been built (no rebuild of target),type: make reinstall[.X] <platform>w To compile a program for use with the TOSSIM simulator, type: make pcw Note: For more information about the TOSSIM simulator, see Lesson 5 in the tutorial:/tos/tinyos-1.x/doc/tutorial/lesson5.htmlExample #1: Blinkw Lesson 1 in the tutorial:/tos/tinyos-1.x/doc/tutorial/lesson1.htmlExample #2: Sensingw Lesson 2 in the tutorial:/tos/tinyos-1.x/doc/tutorial/lesson2.htmlExample #3: Using the radio w Lesson 4 in the tutorial:/tos/tinyos-1.x/doc/tutorial/lesson4.htmlWhat should I do next?1.Download and install TinyOS2.Read the first four tutorialsw Implement the tutorials (schedule TBA)3.Read Chapter 1 of the WSN textbook4.Read “System Architecture Directions forNetworked Sensors”What should I do next? 5.Think about project ideas –use yourimagination//news/article.html?item_id=285/dataman/ActiveTape/Tree/Technologies we haven’t tried yet:Mica2Dot motesTASKNetwork reprogrammingSimulatorsOther helpful linksw Crossbow: Spec sheets and prices for Berkeley motes and othersensor network productsw Search the TinyOS mailing list archives: /tos/search.html。

无线传感器网络操作系统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学习笔记讲解

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

Lesson1---TinyOS入门1

Lesson1---TinyOS入门1
• 运行环境:TinyOS 2.1 + Cygwin (Windows XP) • Cygwin在Windows下提供一个类似Linux的环境
11
一、编译和安装
• 作为一开始的学习,先来编译一个非常简 单的程序 Blink。若没有硬件节点,可以用 TinyOS的TOSSIM仿真平台进行编译运行。 • 编译TinyOS程序使用make命令,TinyOS系 统有一个强大的扩展性很强的make 系统, 位于 tinyos-2.x/support/make目录中。 • 先运行如下命令检查环境是否正确配置。 • $ tos-check-env
8
• 总的来说,TinyOS 调度模型有以下特点:
(1)任务单线程运行到结束,仅分配单个任务栈, 这对内存受限系统很有利。 (2)任务调度算法采用非抢占式的FIFO 算法,任 务之间相互平等,没有优先级之分。 (3)TinyOS 的调度策略具有能量意识,当任务队 列为空时,处理器进入休眠模式,直到外部事件 将它唤醒,能有效的降低系统能耗。 (4)这种基于事件的调度策略,允许独立的组件共 享单个执行的上下文, 只需少量运行空间就能获 得高度的并发性。
• 规范
– nesC应用程序由一个或多个组件连接而成。 – 一个组件可以提供或使用接口:
» 组件中command接口由组件本身实现; » 组件中event接口由调用者实现; » 接口是双向的,调用command接口必须实现其event接口。
26
2.1 配件和模块
• 组件有两种:配件和模块。 • 模块(module):提供一个或多个接口的实现。 • 配件(configuration):把其他的组件装配起来, 连接组件使用的接口到其提供者。 • 每个nesC应用程序都必须有且只有一个顶层配件 (top-level configuration)连接内部组件。 • 之所以区别设计模块与配件,是为了让系统设计 者在构建应用程序的时候可以脱离现有的实现。 例如:设计者可以提供配件,只是简单地把一个 或多个模块连接起来,而不涉及其中具体的工作。 同样地,另一个开发者负责提供一组模块库,这 些模块可以普遍使用到众多应用中。

TinyOS

TinyOS

2010-8-4
mice
15
Network Management— Active Message
e) Each Active Message Contains
User-level handler to be invoked on arrival Data payload passed as argument
f) Event-centric nature
Enables network communication to overlap with sensor-interaction
2010-8-4
mice
16
Network Management— Active Message
g) Handler Functions
2010-8-4
mice
10
TinyOS的特点
Split-Phase Operations
在TinyOS中由于tasks 之间不能互相占先执 行,所以TinyOS没有提供任何阻塞操作,为 了让一个耗时较长的操作尽快完成,一般来说 都是将对这个操作的需求和这个操作的完成分 开来实现,以便获得较高的执行效率。
Event-Driven Architecture
TinyOS的应用程序都是基于事件驱动模式的,采用 事件触发去唤醒传感器工作。
2010-8-4
mice
9
TinyOS的特点
Tasks And Events Concurrency Model
tasks一般用在对于时间要求不是很高的应用中,且tasks之间是 平等的,即在执行时是按顺序先后来得,而不能互相占先执行, 一般为了减少tasks的运行时间,要求每一个task都很短小,能 够使系统的负担较轻;events一般用在对于时间的要求很严格的 应用中,而且它可以占先优于tasks和其他events执行,它可以 被一个操作的完成或是来自外部环境的事件触发,在TinyOS中 一般由硬件中断处理来驱动事件。

tinyos初步

tinyos初步
command result_t StdControl.init() { call Leds.init(); return SUCCESS; } command result_t StdControl.stop() {….} ………….. }
d2
//sched.c void TOSH_sched_init(void){ int i; a2 TOSH_sched_free = 0; TOSH_sched_full = 0; b1 for (i = 0; i < TOSH_MAX_TASKS; i++) T OSH_queue[i].tp = NULL;} //StdControl.nc interface StdControl { command result_t init(); c1 command result_t start(); command result_t stop(); } 说明:a1—全局作用域中的c变量名字空间,a2--全局作用域中的c标签名字空间…..依次类推
组件 of tasks
Event Handlers
Frame
(containing state information)
Tinyos 组件结构
组件编程模式
Component interface
Commands accepted (implemented) Commands used Events accepted (implemented) Events used
Nesc的语法:
省略.
Nesc中的并发性和原子操作----竞争处理机制
tinyos采用静态分配方式---编译时就确定全部应用程序所需存 储器空间 tinyos不提供动态存储保护,共享变量的保护也是在编译时就完 成的. nesc假定程序的执行模型是由Rtc(运行至完成)任务+由硬件信 号异步通知的中断处理程序共同组成的. 基于nesc的调度器必须按照Rtc方式来执行任务(标准的tinos调 度器遵循fifo策略).由于任务是不被抢占并且rtc的,因此它们之 间相对来说是原子的,但相对中断处理来路说就不是的了.

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程序。

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

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

tinyos

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-),男,博士,副教授,硕士生导师。

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资料

tinyos资料

TinyOS是一个开源的嵌入式操作系统,它是由加州大学的伯利克分校开发出来的,主要应用于无线传感器网络方面。

它是基于一种组件(Component-Based)的架构方式,使得能够快速实现各种应用。

TinyOS的程序采用的是模块化设计,所以它的程序核心往往都很小(一般来说核心代码和数据大概在400 Bytes左右),能够突破传感器存储资源少的限制,这能够让TinyOS很有效的运行在无线传感器网络上并去执行相应的管理工作等。

TinyOS 本身提供了一系列的组件,可以很简单方便的编制程序,用来获取和处理传感器的数据并通过无线电来传输信息。

TinyOS是一个开源的嵌入式操作系统,它是由加州大学的伯利克分校开发出来的,主要应用于无线传感器网络方面。

它是基于一种组件(Component-Based)的架构方式,使得能够快速实现各种应用。

TinyOS的程序采用的是模块化设计,所以它的程序核心往往都很小(一般来说核心代码和数据大概在400 Bytes左右),能够突破传感器存储资源少的限制,这能够让TinyOS很有效的运行在无线传感器网络上并去执行相应的管理工作等。

TinyOS本身提供了一系列的组件,可以很简单方便的编制程序,用来获取和处理传感器的数据并通过无线电来传输信息。

TinyOS在构建无线传感器网络时,它会有一个基地控制台,主要是用来控制各个传感器子节点,并聚集和处理它们所采集到的信息。

TinyOS 只要在控制台发出管理信息,然后由各个节点通过无线网络互相传递,最后达到协同一致的目的,比较方便。

1. tinyos和普通的os的不同点它们的应用场景不一样,tinyos是一个开源的构件化操作系统,它采用构件化描述语言nesC 进行开发,主要针对资源非常有限的无线传感器网络节点而设计。

与一般的嵌入式操作系统相比,TinyOS有其自身的特点:采用模块化设计,所以核心尺寸小(一般来说核心代码和数据大概在400Bytes左右),可突破无线传感器网络存储资源少的限制;基于可重用组件的体系结构;使用事件驱动模型,通过事件触发来唤醒CPU工作;单一任务栈;内核非常简单,甚至在严格意义上说,称不上内核;没有进程管理和虚拟存储。

无线传感器网络节点操作系统TinyOS综述

无线传感器网络节点操作系统TinyOS综述

通信机制方面,TinyOS支持多种无线通信协议,如ZigBee、IEEE 802.15.4 等。它采用了轻量级的通信协议栈,实现了高效、可靠的无线通信,并降低了功 耗。
TinyOS应用程序开发来自使用TinyOS开发应用程序需要对TinyOS的编程模型有一定的了解。TinyOS 应用程序的基本结构包括硬件配置、任务定义、事件处理和通信协议等几个部分。
3、AI集成:人工智能技术在无线传感器网络中的应用前景广阔。未来 TinyOS可以集成AI算法和模型,实现对传感器数据的智能分析和处理,提高无线 传感器网络的智能化水平。
4、低功耗优化:低功耗一直是无线传感器网络追求的重要指标之一。未来 TinyOS可以通过进一步优化事件驱动机制、节能策略等方面来降低节点功耗,延 长网络寿命。
2、组件化:TinyOS采用基于组件的架构,提供一系列可复用的组件(包括 传感器驱动、通信协议、数据处理等),方便开发者根据具体应用需求进行定制 和扩展。
3、事件驱动:TinyOS采用事件驱动的编程模型,通过中断和事件处理机制 实现异步和并发任务,有效降低能耗并提高系统响应速度。
4、灵活的通信协议:TinyOS支持多种无线通信协议,如Zigbee、IEEE 802.15.4等,方便构建多跳、自组织的无线传感器网络。
TinyOS操作系统的应用实例
TinyOS操作系统在无线传感器网络中具有广泛的应用实例。例如,在智能家 居领域,TinyOS可以通过无线通信技术将各种智能设备连接起来,实现家居环境 的实时监测和智能控制。在环境监测领域,TinyOS可以部署在无人值守的野外环 境,对大气、土壤、水质等进行长期、稳定的数据采集和传输。
4、调试和测试:通过仿真或实际测试来验证代码的正确性和性能。 5、部署:将编写的应用程序部署到WSN节点上,并监控其运行情况。

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
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

入门-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程序的中组件的层次结构,也就是接口,方法,属性,函数的关系。

一个Component调用其他的Component的方式是使用“interface”,使用方用关键字“uses”的interface连接到提供方“provides”的interface。

那么
使用方就可以在自己的实现中去使用来自提供方“interface”当中的方法。

在这里必须强调:
A.一个组件如果use某个interface,就必须实现这个interface当中的event。

B.一个组件如果provide某个interface,就必须实现这个interface当中所有的command。

Interface我个人把他看成是系统可以识别的方法或者说函数的集合,或者可以说系统的API,通常interface的内容是几个command 和/或 event的声明。

单看interface文件而言,command和event里面的内容是空着的,这点和java 很像。

command 和 event是逻辑代码具体实现的地方,他们的具体内容由provide他们的component来实现。

我们所熟悉的内容在这里出现,if和for都可以在这里出现了。

我的理解,command和event就是我们熟悉的c语言当中的函数,或者java当中的方法。

因为command出现了标志性的括号,比如init()。

注意,在被调用的时候,Command用“call”,event用“signal”。

TinyOS提供了一些系统interface,用来完成基本的程序功能。

这里很神奇,因为知道某个interface就可以直接完成你的工作,但是作为学习者的我们就非常的累,你必须去熟悉和了解这些interface对应的功能和用法。

比如stdcontrol 接口就是用来控制程序流程,有3个command,分别是init(),start(),stop()。

再比如Leds接口是用来控制传感器上的灯的,有很多command,比如redon(),redoff()就是控制红灯亮暗。

在component,interface,command/event当中是有层次关系的。

一般来说,component是最高级的,可以理解为Interface是 Component的下层,command/event是interface的下层。

Component. Interface. Command()
4. 你不习惯NesC程序的中组件的分类和定义。

常见的Component分为两类,“configuration”和“module”
“configuration”用来完成component之间的连接。

这个是tinyos特有的。

至少在我学习过的语言中,是独一无二的。

我不评价这种机制好或者是不好,但是既然学习了这门语言,也就好好学习这个机制。

这个机制可以说是tinyos的核心,所以必须明白,而且要非常清楚!它涉及到所有的nesC程序,所以可以认为这里是学明白nesC的关键。

有两个关键字来实现wiring,我翻译成“连接”好了。

关键字“à”和“ß”永远是将一个使用(uses)的接口于一个提供(provides)的接口相连接。

也就是说只有使用者组件能够调用提供者组件的接口。

反过来就不可以。

Tinyos中,组件和接口是一个多对多的关系,即一个组件可以连接到很多接口,反过来说,很多组件都可以提供一个相同的接口!(核心!最难理解的地方!)
前面说,不同的组件可以提供相同的接口,如果组件ComA,ComB都提供了某一个接口InterfaceC, 那么,当组件ComD需要去访问InterfaceC接口时,怎么办?它访问的到底是ComA提供的InterfaceC还是ComB提供InterfaceC的呢?要知道,虽然接口的名称是一样的,但是不同组件提供的相同接口却是实现不同的功能。

所以配置文件就产生了,它的目的就是声明你要访问的组件名称,并且将它所提供的接口与你真正想要使用的接口相连接。

“module”才是一个组件的真实实现,用来完成该Component的功能,名字常常是xxxxxM,可以和configuration文件对应起来。

Module要声明自己使用和提供的借口,所以“module”当中是实现command和event的真正场所,当然还有特殊的内部函数和task都在这里实现。

在被调用的时候,task用post,command 用“call”,event用“signal”。

5. 你不习惯NesC程序的调动机制。

一般来说,TinyOS中的调度机制比较简单,TinyOS的调度遵循FIFS(先来先服务)规则。

没有事件发生时任务列表按着FIFS进行处理,当事件发生时发生抢占,产生中断处理。

它仅设置一个任务队列。

关键字post将一个任务添加到任务队列中。

不同的Task之间没有优先级,但task可以被interrupt handler打断。

为防止全局变量等公用数据被非正常修改,nesC规定只在task中进入公共的数
据部分。

使用“async”关键字可以指出某个command或者event可以在有中断时使用。

为了协调任务和中断的执行,nesC使用关键字“atomic”去指出代码不可被打断。

相关文档
最新文档