TinyOs NesC
- 格式:ppt
- 大小:4.11 MB
- 文档页数:115
安装TinyOS需要六个步骤。
1.Installing a Java 1.5 JDK.安装java jdk 1.5需要配置环境变量2.Install Cygwin.安装Windows下的Linux模拟器,cygwin3.Installing native compilers.安装单片机工具,AVR或MSP430,根据自己需要。
4.Installing the nesC compiler.安装nesC和TinyOS_tool5.Installing the TinyOS source tree.安装TinyOS2.0.2主文件。
6.Installing the Graphviz visualization tool安装Graphviz并配置环境变量一.安装JDK 1.5下载JDK 2.5 在SUN的官方网站/. 安装并配置JDK的环境变量。
二.安装Cygwin下装Cygwin-1.2a于/dist-1.2.0/tools/windows/cygwin-1.2a.tgz这个版本TinyOS官方测试过,和TinyOS兼容度高。
三.安装单片机工具下载以下五个rpm包1.avr-binutils-2.15tinyos-3.cygwin.i386.rpm(/di st-2.0.0/tools/windows/avr-binutils-2.15tinyos-3.cygwin.i386.rpm)2.avr-gcc-3.4.3-1.cygwin.i386.rpm(/dist-2.0.0/t ools/windows/avr-gcc-3.4.3-1.cygwin.i386.rpm)3.avr-libcavr-libc-1.2.3-1.cygwin.i386.rpm(/dist-2.0.0/too ls/windows/avr-libc-1.2.3-1.cygwin.i386.rpm)4.avariceavarice-2.4-1.cygwin.i386.rpm(/dist-2.0.0/tools/ windows/avarice-2.4-1.cygwin.i386.rpm)5.insight (avr-gdb) avr-insight-6.3-1.cygwin.i386.rpm(/dist-1.2.0/to ols/windows/avr-insight-6.3-1.cygwin.i386.rpm)下载完成之后把五个包都拷贝到Cygwin的tmp文件夹(在Windows操作即可) 依次安装(要按照顺序安装,它们之间有依赖关系),安装命令如下。
nesC编程迷你教程寿颜波@Universitéde Franche-Comté,France内容目录1引子 (1)2基础概念 (1)2.1接口(interface) (1)2.2命令与事件(Command and Event) (2)2.3模块与配置(Model and Configuration) (3)2.3.1模块 (3)2.3.2配置 (5)2.3.3可以提供接口的配置组件 (6)2.3.4任务和事件 (9)3工作环境 (11)4编程开发 (12)4.1Blink (12)4.2 TempRadio (14)4.2.1数据的采集与发送 (15)4.2.2数据的接收 (23)5 TOSSIM仿真 (30)5.1使用TOSSIM编译nesC程序 (31)5.2捕捉、生成运行记录 (31)5.3仿真 (32)5.4运行中的变量值 (35)6结束语 (36)1引子目前在研究领域有多款针对无线传感器网络开发的操作系统,其中最为著名的项目之一便是TinyOS。
它最早由美国Berkeley大学负责开发和维护,并且支持多种传感器平台,例如在研究领域广泛使用的mica系列传感器节点和telos 系列。
在本教程的编写过程当中,我们统一使用Crossbow公司开发的telosb节点。
TinyOS完全由nesC编写,nesC全名Network Embedded System C,它可以被看作是C语言的近亲,在语法上和C语言有非常多的相似之处,如果你有C语言的编写基础,那么针对nesC的学习就会变得轻松很多。
nesC主要是为事件驱动编程而设计的,它也是我们开发TinyOS应用程序的主要编程语言。
本文档的目的在于向读者展示TinyOS的基本运作模式,并且让读者可以在最短的时间掌握TinyOS下程序开发的要领。
而且在编写过程当中,作者假设读者已经具备了基本的编程经验。
如果你需要更为详细的nesC参考资料,可以查阅TinyOS官方网站上面的教程,或者阅读Philip Levis编写的TinyOS Programming Manual。
TinyOSTinyOS是一种专门为嵌入式无线传感器网络所涉及的开源操作系统,它为用户在无线传感器网络有限的资源中能够进行快速的创新和扩展提供了强大的基于组件的架构。
TinyOS 的组件库包括了网络协议,发送服务、传感器驱动和数据采集工具等组件,这些组件都可以在用户的应用程序中被调用。
在这里,TinyOS并不是一个传统意义上的操作系统,它还是一个专门为嵌入式系统所设计的编程框架和用于传感器网络编程的组件库,能够使得基于TinyOS的应用程序足够的小。
同时,TinyOS不支持文件系统,仅仅支持静态内存分配,扩展了一个简单的任务模型并提供了最小设备和网络的抽象。
TinyOS采用了基于组件的编程模型(nesC语言)。
与其他操作系统一样,TinyOS通过层的方式对它自身的软件组件进行组织和管理,处于较低层的组件就越接近与硬件,处于较高层的组件则较接近于应用程序。
一个完整的TinyOS系统应用程序就是由这些组件搭建而成,每一个组件都是一个独立的实体。
在TinyOS的编程中包含了三个概念:命令、事件和任务。
其中,命令和事件是组件之间交互通信的关键机制,任务则是用于传递组件外的消息。
下面将分别介绍这些概念:命令通常是向另一个组件请求服务时所发送的指令,举一个简单的例子就是要求传感器开始进行数据的采集。
与之相对比的是,事件通常是一个组件在完成自身的服务后向外发送的信号。
在传统的操作系统理论中,命令相当于是自上而下的调用而事件相当于回调。
TinyOS编程概览TinyOS操作系统,组件库和所有的应用程序都使用nesC语言进行编程,nesC是一个新型基于组件的结构化编程语言,主要用于进行传感器网络的嵌入式程序开发。
它采用类似于C语言的语法进行编程,因为TinyOS最初是使用汇编和C语言编写的,但是经过长期的使用,研究人员发现汇编和C语言并不能有效、方便地支持面向传感器网络的应用。
因此他们对C语言进行了一定扩展,提出了支持组件化编程的nesC语言,把组件化/模块化思想和基于事件驱动的模型结合在了一起。
nesC编程语言在无线网络传感器设计中的应用新型编程语言——nesC其最大的特点是,将组件化/模块化思想和基于事件驱动的执行模型相结合。
现TinyOS操作系统和基于TinyOS的应用程序都是用nesC语言编写的,大大提高了应用开发的方便性和应用执行的可靠性。
本文以WSN为背景,通过一个基于TinyOS的灯闪烁实例——Blink,详细介绍nesC语言的结构以及用该语言如何实现组件化/模块化的应用程序,为深入研究TinyOS的应用开发提供一种实现方法。
1nosC语言结构nesC是C语言的扩展,精通新型编程语言——nesC其最大的特点是,将组件化/模块化思想和基于事件驱动的执行模型相结合。
现TinyOS操作系统和基于TinyOS的应用程序都是用nesC语言编写的,大大提高了应用开发的方便性和应用执行的可靠性。
本文以WSN为背景,通过一个基于TinyOS的灯闪烁实例——Blink,详细介绍nesC语言的结构以及用该语言如何实现组件化/模块化的应用程序,为深入研究TinyOS的应用开发提供一种实现方法。
1 nosC语言结构nesC是C语言的扩展,精通C语言的程序员掌握这种语言相对比较快。
与C语言的存储格式不同,用nesC语言编写的文件是以“.nc”为后缀。
每个nc文件实现一个组件功能(组件化/模块化)。
在nesC程序中,主要定义两种功能不同的组件——模块(module)和配件(configuration)。
模块主要用于描述组件的接口函数功能以及具体的实现过程,每个模块的具体执行都由4个相关部分组成:命令函数、事件函数、数据帧和一组执行线程。
其中,命令函数是可直接执行,也可调用底层模块的命令,但必须有返回值,来表示命令是否完成。
返回值有3种可能:成功(见BlinkM.nc代码部分)、失败、分步执行。
事件函数是由硬件事件触发执行的,底层模块的事件函数跟硬件中断直接关联,包括外部事件、时钟事件、计数器事件。
一个事件函数将事件信息放置在自己的数据帧中,后通过产生线程、触发上层模块的事件函数、调用底层模块的命令函数等方式进行相应处理,因此节点的硬件事件会触发两条可能的执行方向——模块间向上的事件函数调用和模块间向下的命令函数调用。
Tinyos调度器和任务介绍1、介绍TinyOS有二个基本的计算抽象:异步事件和任务。
Tinyos早些版本提供单一的类型任务,没有参数且只能FIFO调度。
将任务调度表现成TINYOS组件更容易制定,将任务表现成TINYOS接口可扩展任务类型。
TINYOS2.0采用这二种方法,这份文本记录了其是如何以简单的机制来提高系统可靠性。
2、TinyOS1.x任务调度TinyOS中的任务是可延迟的调用过程DPC,可以使某程序延迟计算或操作。
TOS任务一次运行完毕,任务间不可抢占。
这二个约束条件意味着任务代码是同步的。
也就是说,任务是原子性的。
在tinyos1.x中,nesC语言通过二种机制支持任务,任务声明和任务发布表达post task void computeTask(){//Code here}result_t rval=post computeTask();TinyOS1.x提供单一的任务类型,无参数函数及单一FIFO的调度策略。
Post语句可返回FAIL,表明TinyOS发布任务失败。
可发布任务多次。
例如,如果某一任务连续发布了二次,第一次成功但第二次失败,此任务将会被运行一次。
因为这样,虽然一次发布失败,但任务仍可能运行。
Tinyos1.x调度器由sched.c文件中的C函数集实现的。
若要修改调度器则需替代或修改此文件。
另外,因为任务仅通过nesC中的task关键字声明和post关键字支持,假设是无参数函数,不能修改语句或任务功能。
Tinyos1.x的任务队列是由固定大小的函数指针类型的循环缓冲实现。
发布任务就是将此任务的函数指针放入下个空缓冲区中。
如果没有空的缓冲区,发布任务将返回失败。
这类模型有几个问题:1)某些组件针对发布任务失败没有合适的响应2)某给出的任务能发布多次,这将占用多个缓冲区3)所有组件的所有任务共享单一资源:某个有问题的组件可能导致其他组件发布任务失败。
从根本上来,为了使组件A在发布任务失败后重新发布任务,另外一个组件B必须调用A的函数(命令或事件)??。
tinyOS
/tinywiki/index.php/Getting_started /TinyOS是UC Berkeley(加州大学伯克利分校)开发的开放源代码操作系统,专为嵌入式无线传感网络设计,操作系统基于构件(component-based)的架构使得快速的更新成为可能,而这又减小了受传感网络存储器限制的代码长度TinyOS的构件包括网络协议、分布式服务器、传感器驱动及数据识别工具。
其良好的电源管理源于事件驱动执行模型,该模型也允许时序安排具有灵活性。
TinyOS已被应用于多个平台和
感应板中。
TinyOS操作系统、库和程序服务程序是用nesC写的
nesC是一种开发组件式结构程序的语言
nesC是一种C语法风格的语言,但是支持TinyOS的并发模型,以及组织、命名和连接组件成为健壮的嵌入式网络系统的机制
◇nesC应用程序是由有良好定义的双向接口的组件构建的
◇nesC定义了一个基于任务和硬件事件处理的并发模型,并能在编译时检测数据流组件TinyOS只能运行单个由所需的系统模块和自定义模块构成的应用程序
两个线程
◇任务
●一次运行完成,非抢占式
◇硬件事件处理
●处理硬件中断
●一次运行完成,抢占式
●用于硬件中断处理的command和event必须用async关键字声明。
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中unique()和uniqueCount()的应用和区别
nesC 现在有二种常量函数:
unsigned int unique(char *identifier)--如果程序包含n个有相同标示字符串的对unique的调用,每个调用返回一个0~n-1之间的无符号整数。
unsigned int uniqueCount(char *identifier)--如果程
序包含相同标示字符串的对uniqueCount的调用,每个调用都返回nunique()主要用于产生一个不重复的随机数,范围有括号中的参数的位数所决定。
当然括号内的标识符一定要相同,否则不能保证调用多个unique()时得到的数是不重复的。
比如unique(“TIME”)和unique(“TIME”)会得到两个不同的随机数,但如果是unique(“TIME”)和unique (“TIME2”)就不能保证得到独一无二的数了。
uniqueCount ()主要用于得到范围的上界。
比如uniqueCount(CLIENT),如果CLIENT为8位,则该次调用的返回值为255,如果将CLIENT改为16位,则返回65535。
使用该函数的好处,是便于维护和保持一致性。
TinyOS系统与nesC程序设计课内实验指导书一、课内实验项目一览表二、详细实验指导书实验一:编程环境建立一实验目的1、掌握Java基本开发环境(JDK)的安装和配置方法。
2、掌握cygwin程序的安装,在建立windows下类似Unix环境。
3、掌握Linux基本命令及cygwin下安装TinyOS的方法。
二实验原理无三实验环境1、运行Windows的PC机,能够连接Internet2、PC机配置要求:四实验内容和步骤1、java jdk安装首先,我们安装JA V A开发工具JA V A JDK 1.6官方下载地址:/javase/downloads/.安装过程只需下一步……下一步便可,默认安装路径是C:\Program Files\Java上图是TinyOS 2.0.2 安装时截取的JA V A JDK1.5的图,只供参考。
然后,我们需要设置电脑的环境变量,需要新建两个环境变量,以便使用JDK 具体过程如下:右击我的电脑——〉属性——〉高级——〉环境变量先新建或编辑系统变量:变量名(N):JA V A_HOME变量值(V):JDK安装的路径,其默认的路径为:C:\Program Files\Java\jdk1.6.0_10变量名(N):CLASSPATH变量值(V):.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;;%JAVA_HOME%\bin;%JAVA_HOME%\jr e\bin;在系统变量(S)栏选中变量为Path的选项,点编辑在变量值(V)的末尾添加:;%JAVA_HOME%\bin; ;%JAVA_HOME%\jre\bin;然后新建或编辑用户变量:同样再设置一个JAVA_HOME,变量值也一样。
在用户变量的PATH中添加:;%JAVA_HOME%\bin:$PATH;%JAVA_HOME%\jre\bin:$PATH;这样,我们的环境变量已经设置完毕了。