TinyOS学习笔记_zhj_01
入门-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页文档

– 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操作系统整理

前言 (3)编程小贴士 (3)链接和命名空间 (6)3.1 C (6)3.2 C++ (9)3.3 Java (11)3.4 组件与接口 (11)3.5 Why? (13)接口和模块 (15)4.1 Split Phase (15)4.2带参数的接口 (16)4.3模块的实现 (17)4.4 Tasks(任务) (19)4.5 Concurrency并发 (23)4.6 Allocation (31)Configurations and Wiring (35)5.0.1 The as keyword and other namespace tricks (39)5.1 Pass Through Wiring (41)5.1.1 Multiple Wirings, Fan-in, and Fan-out 多串联,扇入,扇出。
(42)5.2 Combine Functions (44)Parameterized Wiring (46)6.1 Defaults (50)6.2 unique() and uniqueCount() (51)第一章前言这本书介绍了如何在TinyOS 2.0(T2)下编程。
它比之前的指导性的文章更为深入些,而且还涉及到一些额外的主题,例如radio stacks的结构及其实现和一些现存的TinyOS 库。
这本书关注于如何编写nesC代码,以及解释那些nesC和TinyOS设计模式背后的概念和原理。
如果你想很快速的了解如何进行TinyOS编程,你可以先阅读指导(tutorials).如果你对TinyOS的某个子系统很感兴趣,你可以参阅TEPs(TinyOS Enhancement Proposals),它详细阐述了相应的设计,接口和组件。
这些都可以在TinyOS的发布目录下找到。
虽然本书的一些内容仍然适用于TinyOS 1.x的版本,但1.x的版本与T2版本的不同还是会导致不同编程实践。
TinyOS操作系统开发技术及实践(西电版)实践4 TinyOS应用开发

实践4 TinyOS应用开发 (2) 创建并编写ADSensorSendC.nc文件。 使用EditPlus程序在ADRadioSend目录下新建
ADSensorSendC.nc文件,并输入如下代码:
#include “Adc.h” #include “BlinkToRadio.h” #include <Timer.h>
实践4 TinyOS应用开发
TinyOS操作系统开发技术及实践(西 电版)实践4 TinyOS应用开发
1
实践4 TinyOS应用开发
实践指导
➢ 实践4.G.1 实现CC2530光敏信息的采集传输及向PC机传送数据,需
要完成以下工作: (1) 通过AD进行光敏信息的采集。 (2) 通过射频将数据发送至接收者。 (3) 接收者接收到数据之后,将接收的数据通过串口发送
interface Leds; interface Packet; interface AMPacket; interface AMSend; interface SplitControl as AMControl; interface PacketAcknowledgements;
14
实践4 TinyOS应用开发
11
实践4 TinyOS应用开发
ADSensorSendC.UartStream -> PlatformSerialC.UartStream; //LED组件 ADSensorSendC.Leds->LedsC.Leds; /*射频发送组件*/ ADSensorSendC.Packet->ActiveMessageC; ADSensorSendC.AMPacket->ActiveMessageC; ADSensorSendC.AMSend>ActiveMessageC.AMSend[uniqueCount("ADRadioSend")]; ADSensorSendC.AMControl->ActiveMessageC; ADSensorSendC.PacketAcknowledgements->ActiveMessageC; }
TinyOS中文使用完全手册

1 TOSSIM 简介 ...................................................................................................44 2 建立和运行应用程序.......................................................................................44 3 增加调试语句...................................................................................................45
第四章 用于处理应用数据的任务 ......................................................................................................34
1 任务的创建和调度..........................................................................................34 2 SENSETASK 应用程序.......................................................................................34 3 练习...................................................................................................................35
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

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学习笔记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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WSN与TinyOS
一,WSN网络(无线传感器网络)的特点及其设计目标:
1.1)WSN的硬件节点的功能,结构,及其组织方式会随其应用而不同。
因此,要求WSN的操作系统能够具有良好的模块化设计,使应用/协议/服务于硬件资源之间的可以随意搭配。
1.2)WSN的硬件资源非常有限。
因此,要求WSN的操作系统必须高效的使用各种有限资源。
1.3)WSN的是一个无线的网络系统。
因此,要求WSN的操作系统必须面向网络化进行开发,必须为应用提供高效的通信和组网机制。
二,TinyOS介绍与特点:
2.1,TinyOS特点:TinyOS是一个基于组件,使用nesC编写,由事件驱动的WSN操作系统。
nesC语言:nesC语言以C语言为基础,并支持C语言的语法和词法。
TinyOS:TinyOS利用nesC语言以应用为目标增加了组件(component)和接口(interface)两个概念,只支持组件之间静态链接。
2.2,组件模型结构:
组件模型
2.3,组件分类,特征,及其使用:
分类:
Module 组件(又称为模件)
Configuration 组件(又称为配件)
组件特征:
由于TinyOS 对模块化特点的特殊需要甚至于是强化,各个组件内部的变量,函数可以自由访问交换;但是组件之间一般是不可以这样的。
组件的使用:
组件提供了提供(provide)和使用(use)两类接口。
接口可以理解为是一个组件之间相互访问交互的相关函数的集合,接口可以声明一组函数(包括事件(event)函数)。
为了统一使用而不出差错,TinyOS 默认规定接口的提供者必须实现所有声明的接口。
注意:提供接口未必有“用户”使用,而使用接口必须有“用户”使用,否则会编译时会提示出错,并且在一定条件下,use也可以动态配置。