TinyOS 实验报告
- 格式:docx
- 大小:1.01 MB
- 文档页数:4
TinyOS任务调度的研究与改进李明,丁恩杰中国矿业大学信电学院,江苏徐州(221008)E-mail:lmsiee@摘要:本文介绍了TinyOS任务调度机制,指出TinyOS调度策略的特点及不足。
采用一种改进式NPEDF算法对TinyOS的调度器进行实时性改造,并详细描述了具体改进方案。
实验测试的结果证明了这种改进策略的有效性。
关键词:TinyOS,任务调度,实时性,NPEDF中图分类号:TP316.891.引言传感器技术、嵌入式计算技术、微电子技术、无线通信技术以及半导体与微机电系统制造技术的飞速发展和相互融合使得具有感知、计算和通信能力的低功耗多功能无线传感器网络得以实现。
近年来,无线传感器网络(WSN-Wireless Sensor Networks)被广泛应用于国防军事、国家安全、环境科学、交通管理、医疗卫生、反恐、灾害监测等领域[1]。
无线传感器网络操作系统(WSNOS)是无线传感器网络的支撑技术之一。
它是WSN 应用程序的基本软件环境,核心是任务调度。
目前面向无线传感器网络的操作系统主要有TinyOS、MANTIS OS[2]、SOS、SenOS[3]、PEEROS[4]等,其中最为流行的是加州大学伯克利分校开发的TinyOS[5]。
它采用基于组件的架构方式,在传感器网络天生就严格限制内存的条件下,可以用最小代码快速来创新和实现各种应用。
目前,它已经被成功的应用到多种硬件平台上,具有很高的应用价值和研究意义。
本文主要研究了TinyOS现有的任务调度策略,在分析出应用TinyOS可能存在的问题的基础上,结合嵌入式实时操作系统的相关理论,提出了一种改进式NPEDF算法,并用这种算法对TinyOS调度器进行实时性改造。
最后,通过实验对改进前后的TinyOS进行测试,以此来验证本文采用的调度算法对无线传感器网络通信性能的影响。
2.TinyOS 2.0任务调度策略TinyOS 2.0采用任务和事件驱动相结合的两级并发模型,任务调度策略采用简单的先进先出(FIFO)算法。
物联网TinyOS课程教学研究与探索一、背景随着物联网技术的不断发展和普及,物联网教育也得到了越来越多的重视。
物联网作为未来社会的一大趋势,已经成为不少院校的教学内容。
而TinyOS作为一个广泛应用于物联网领域的操作系统,也应运而生,在物联网教育中得到了广泛的应用。
如何深入浅出地帮助学生了解这一系统,并提高他们的动手实践能力,是一个亟待解决的问题。
二、TinyOS课程介绍1. 课程目的本课程主要旨在帮助学生了解物联网操作系统TinyOS的基础知识,掌握其应用技能,并能在实际项目中应用它。
具体来说,本课程主要分为以下几个部分:•TinyOS的基础知识介绍•硬件平台设计与搭建•TinyOS应用程序开发实践•基于TinyOS的物联网应用实践2. 课程内容2.1 TinyOS的基础知识介绍介绍TinyOS作为一种受限操作系统(RTOS)的特点及其应用的背景、优缺点等。
主要内容包括:•TinyOS的概述及其功能•TinyOS的架构设计•TinyOS应用场景2.2 硬件平台设计与搭建介绍物联网常用的硬件平台、系统架构及相应的软件开发环境配置等内容。
主要内容包括:•操作系统选型及其相关参数设置•TinyOS开发环境搭建•节点硬件设计及构建方法2.3 TinyOS应用程序开发实践教授如何基于TinyOS进行应用程序开发,包括事件驱动型应用程序开发、多任务并发控制程序开发、通信协议开发等。
主要内容包括:•TinyOS应用开发框架介绍•事件驱动型应用程序开发实践•多任务并发控制程序开发实践•通信协议开发实践2.4 基于TinyOS的物联网应用实践介绍如何应用TinyOS完成物联网应用项目的开发,包括物联网应用程序设计、数据处理方法、物联网协议实现等内容。
主要内容包括:•物联网应用程序设计•数据处理方法•物联网协议实现三、TinyOS课程教学探索1. 以实践为主导TinyOS课程要求以实践为主导。
通过设计和完成小型实验和项目,学生才能够全面深入地了解其原理和实践方法。
TinyOS无线传感器网络操作系统分析0 引言无线传感器网络是由部署在监测区域内的大量廉价微型传感器节点,通过无线通信方式组成一个多跳的自组织的网络系统,其目的是协同感知、采集和处理网络覆盖区域中感知对象的信息,并发送给观测者。
无线传感器网络技术研究涉及到多个热点学科的前沿领域,比如传感器技术、现代网络技术、嵌入式计算机技术、无线通信技术等。
由于无线传感器网络在工业监测、环境检测、医疗监护、军事侦察等众多的领域都有着广阔的应用前景,因而引起了世界各国工业界,学术界和军事部门的重视,并且迅速成为当今世界研究的热点之一。
1 无线传感器网络的主要特点传感器网络节点硬件一般都由数据采集、数据处理、数据收发和电源等四个单元组成。
数据采集单元通过传感器采集外界数据并将其转化为数字信号;数据处理单元是节点的核心模块,负责协调节点各部分的工作,如对数据采集单元采集的数据进行必要的处理和保存,以及数据收发单元工作模式的设置等;数据收发单元负责数据的无线传输以及与数据处理单元的数据交互。
上述四大基本模块与相应的操作系统、协议栈和应用程序共同构成一个基本的无线传感器网络节点,众多的网络节点分布在一起,就可以完成无线传感网络的基本功能。
在软件设计方面,本系统以专用嵌入式实时操作系统为依托,来管理、协调传感器节点各硬件部分的工作。
上层应用以及各层的通信协议都以节能为中心,必要时可以牺牲其他的一些网络性能指标来获得更高的电源效率。
图1所示是一个传感器网络节点的基本组成。
传统的无线网络设计基本上都是为了同时满足人们各种各样的需要,如语音、视频、图像等。
而无线传感器网络一般是为了某个特定的需要而设计的,它是一种基于应用的无线网络,与移动通信网、无线局域网、Bluetooth相比,无线传感器网络具有以下主要特点:(1)电源能量有限:无线网络中,每个节点的电源都是有限的,网络大多工作在无人区或者对人体有伤害的恶劣环境中,一般更换电源几乎都是很困难的事。
nesC实验报告一南昌航空大学实验报告二O 一六年 3 月28 日课程名称:TinyOS与nesC编程实验名称:CC2530平台上TinyOS编程基础班级:姓名:指导教师评定:签名:一、实验目的:1.加深和巩固对于TinyOS编程方法的理解和掌握2.初步的认识TinyOS编程的基础和简单的程序编写3.通过本实验能够初步的了解和掌握TinyOS编程的整个过程4.提高上机和编程过程中处理具体问题的能力二、实验要求:1.实验要求自己独立的完成;2.编写和调试过程中出现的问题要做好记录,并事后总结到报告中3.实验程序调试完成后,用给定的平台进行测试,由老师检查测试结果,并给予相应的成绩4.实验完成后,要上交实验报告。
三、实验内容:1.开发一个新的应用,节点每一分种工作5秒,以PM2模式休眠55秒。
在工作期间,控制LED以1秒为周期闪烁。
以下述顺序完成这个新应用的开发。
1.首先使得应用能够以1秒为周期控制LED闪烁;(1)顶层配置文件MyLEDAppC.nc顶层配置组件名为MyLEDAppC,实现部分使用到四个组件,分别是MainC组件、LedsC组件、毫秒级定时器TimerMilliC()组件以及应用程序配置组件。
其中应用程序配置组件进行重命名为App,TimerMilliC组件为通用组件,因此使用new关键字进行实例化并重命名为Timer1。
在声明了所需使用的组件之后,需要进行对应接口的连接,依次连接到MainC组件的Boot接口,LedsC组件的Leds接口和TimermilliC()组件的Timer接口,分别完成通知应用程序MyLEDAppM模块组件系统启动完毕、控制LED灯和启动定时器的功能。
(2)模块组件MyLEDAppM.nc模块组件名为MyLEDAppM,声明部分使用在配置组件中连接的三个接口,实现部分实现两个事件,分别是Boot.booted()事件和Timer1.fired()事件,在booted()事件中实现了定时器的启动和LED灯的初始化(关闭),通过startPeriodic(1024)命令设定定时时间为1秒,在fired()事件中实现了LED灯状态的改变,当定时时间一到触发fired()事件,LED灯状态改变,实现间隔一秒闪烁。
实验一.Downloading and installing TinyOS一、安装JDK(在平台ubuntu12.10搭建)1.编译一个源文件终端收入命令:sudo gedit/etc/apt/sources.list.d/partner.list2.在partner.list文件中添加:终端输入命令:deb /ubuntu/hardy multiverse3.保存该文件并退出,执行下列程序:终端输入命令:sudo apt-get update4.下载JDK终端输入命令:sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-jdk5.配置JDK环境变量在主文件下的.bashrc或者.profile中添加下面语句,或者在终端输入。
(关于路径参照自己解压路径)export JAVA_HOME=/usr/lib/jvm/java-6-sunexport PATH=$JAVA_HOME/bin:$PATHexport classPath=/usr/lib/jvm/java-6-sun6.在终端中输入java,javac看是否配置正确终端输入命令:java或者javac二、安装tinyOS-2.1.11.安装python-dev g++终端输入命令:sudo apt-get install python-dev g++2.查看python的版本终端输入命令:python–version(本机是Python2.7.3)3.安装tinyos①.在主文件夹/etc/apt/sources.list中添加一下两行:deb /tinyos/dists/ubuntu natty maindeb /tinyos oneiric main终端输入命令:sudo gedit/etc/apt/sources.list(sources.list是只读文件,所以必须有root 权限)②.下载安装tinyos-2.1.1终端输入命令:sudo apt-get install tinyos-2.1.1安装完成后,打开/opt/tinyos-2.1.1/support/make/sim.extra,找到PYTHON_VERSION=2.5(本机),将2.5换成2.7③.终端输入命令:sudo gedit/opt/tinyos-2.1.1/tinyos.env,在tinyos.env中添加④.在主文件夹/.bashrc中添加:source/opt/tinyos-2.1.1/tinyos.envexport CLASSPATH=$TOSROOT/support/sdk/java/tinyos.jar:.⑤.在/etc/profile.d/tinyos.env同样添加:终端输入命令:sudo gedit/etc/profile.d/tinyos.env⑥.安装JNI终端输入命令:tos-install-jni终端输入命令:tos-check-env会出现java和graphviz版本报错,可以忽略。
微机系统实验报告一、实验目的本次微机系统实验的主要目的是通过实际操作和研究,深入了解微机系统的组成、工作原理以及相关的硬件和软件技术,提高我们对计算机系统的理解和应用能力。
二、实验设备与环境本次实验所使用的设备包括一台配备有英特尔酷睿 i5 处理器、8GB 内存、512GB 固态硬盘的微机,以及相关的实验仪器和软件,如逻辑分析仪、示波器、编译软件等。
实验环境为 Windows 10 操作系统。
三、实验内容与步骤(一)微机系统硬件组成的认识首先,我们对微机系统的硬件组成进行了详细的观察和学习。
打开计算机主机箱,我们可以看到主板、CPU、内存、硬盘、显卡、声卡等主要硬件组件。
通过观察它们的外观、接口和标识,了解了它们的功能和作用。
(二)CPU 性能测试使用专门的 CPU 性能测试软件,对微机的 CPU 进行了性能测试。
在测试过程中,我们记录了 CPU 的主频、核心数、线程数等参数,并观察了其在不同负载下的性能表现,如处理单线程任务和多线程任务时的速度和效率。
(三)内存性能测试通过内存测试软件,对微机的内存进行了读写速度、延迟等性能指标的测试。
同时,还研究了不同内存容量和频率对系统性能的影响。
(四)硬盘性能测试利用硬盘性能测试工具,对微机的固态硬盘进行了顺序读写、随机读写等性能测试。
分析了硬盘的读写速度、访问时间等参数,评估了其对系统整体性能的贡献。
(五)显卡性能测试使用显卡性能测试软件,对微机的显卡进行了图形处理能力的测试。
包括 3D 渲染、游戏性能等方面的测试,了解了显卡在不同应用场景下的表现。
(六)系统稳定性测试为了确保微机系统在长时间运行中的稳定性,我们进行了长时间的压力测试。
通过运行大型软件、多任务处理等方式,观察系统是否出现死机、蓝屏等故障。
四、实验结果与分析(一)CPU 性能测试结果经过测试,我们发现微机所配备的英特尔酷睿 i5 处理器在处理单线程任务时表现出色,其主频较高,能够快速完成单个任务。
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;这样,我们的环境变量已经设置完毕了。
实验二 TinyOS执行模型实验目的典型的传感器节点程序可能同时包含同步处理与异步处理过程。
本实验通过介绍TinyOS的执行模型来实现程序的异步处理。
为后续的通信实验以及其他需要异步处理的场合打下基础。
实验要求运行给定的例子程序,观察结果。
然后修改给定的例子程序,实现计算与亮灯的异步处理―亮灯不能被计算阻塞。
具体要求就是修改BlinkTask2例子程序,在满足计算for400001次的同时LED1和LED2可以响应亮灯。
提示:将400001次计算分割成为若干小的部分task进行计算。
实验内容1、同步及异步处理原理前面的程序都是同步运行处理的,也就是说只有单一的执行上下文,属于非抢占式的方式。
这样的会带来一个问题就是,同步代码从开始运行一直占用CPU直到运行完毕为止。
这样的策略虽然有利于TinyOS的调度在使得RAM使用最小化的同时让同步代码尽可能的简单。
但是,在此期间其他同步代码没有任何运行的机会,从而严重系统的响应性。
例如一段运算时间长的同步代码包含在数据包接收代码中就会使得接收数据包的响应非常慢。
前面的例子都是使用了直接函数调用,例如启动顺序或是Timer等,都是运行其操作然后返回。
在大多数时候,这样的编程方法是可以的。
但是非抢占式的同步代码在大计算量的情况下可能会遇到一些问题。
因此,就需要将大计算量的代码分割成为若干小的部分,每次只执行一小部分。
并且,当一个组件需要做某件事情时,其实可以稍后再做。
在TinyOS中,是可以对计算进行延迟的,直到计算所需要的条件都满足时再开始。
任务(Task)是TinyOS应用程序中通用的“后台”处理方式。
一个任务就是一个函数,它告诉TinyOS可以在稍晚时候进行运算,而不是立刻。
在传统操作系统(linux)中与之最接近的概念是中断阀门和延迟程序调用。
2、同步阻塞例子说明打开BlinkTask1例子,可以看到如下代码。
这段代码使得LED0转换400001次,因为计数,所以最后效果与1次的效果是一样的。
西安电子科技大学软件学院TinyOS学习报告第一周报告学院:软件学院姓名:日期:2009/12/24TinyOS的安装:在windows系统中安装TinyOS-2.0需要以下六个步骤:第一步是安装java jdk 1.5;第二步是安装cygwin;第三步是安装avr单片机工具或者MSP430工具;第四步是安装nesc和tinyos-tool;第五步是安装tinyos-2.0;第六步是配置环境变量;本周主要学习了:TinyOS Documentation Wiki—Starting with TinyOS—Tutorials中的几个Lesson:Lesson 1 Getting Started with TinyOSLesson 2 Modules and the TinyOS Execution ModelLesson 3 Mote-mote radio communicationLesson 4 Mote-PC serial communication and SerialForwarderLesson 5 SensingLesson 6 Boot SequenceLesson 7 StorageLesson 1一、TinyOS中一些主要概念:组件、模块、配置以及接口1. 任何一个nesC 应用程序都是有一个或多个组件链接起来。
组件提供(provide)并使用(use)接口。
接口声明了一组函数,称为命令(command),接口的提供者必须实现它们;还声明了另外一组函数,称为事件(event),接口的使用者必须实现它们。
2. 组件有两种类型:模块:提供一个或多个接口的实现配置:装配其他组件并使组件之间的接口相连3. 每个nesC 应用程序都由一个顶级配置所描述4. 为什么要区分模块和配置?为使设计者构建应用程序时能从实现细节中摆脱出来Q:一个配置可以使用和提供接口。
是不是使用或提供接口的配置就不能为顶级配置,而没有使用和提供接口的配置就一定是顶级配置?二、怎样编译一个TinyOS程序以及安装到平台上1.检查环境安装正确与否:tos-check-env2. 查看ncc版本:ncc --version3.使用“make”编译TinyOS应用程序,如:make micaz。
实验一.Downloading and installing TinyOS
一、安装JDK(在平台ubuntu12.10搭建)
1.编译一个源文件
终端收入命令:sudo gedit/etc/apt/sources.list.d/partner.list
2.在partner.list文件中添加:
终端输入命令:deb /ubuntu/hardy multiverse
3.保存该文件并退出,执行下列程序:
终端输入命令:sudo apt-get update
4.下载JDK
终端输入命令:sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-jdk
5.配置JDK环境变量
在主文件下的.bashrc或者.profile中添加下面语句,或者在终端输入。
(关于路径参照自己解压路径)
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export PATH=$JAVA_HOME/bin:$PATH
export classPath=/usr/lib/jvm/java-6-sun
6.在终端中输入java,javac看是否配置正确
终端输入命令:java或者javac
二、安装tinyOS-2.1.1
1.安装python-dev g++
终端输入命令:sudo apt-get install python-dev g++
2.查看python的版本
终端输入命令:python–version(本机是Python2.7.3)
3.安装tinyos
①.在主文件夹/etc/apt/sources.list中添加一下两行:
deb /tinyos/dists/ubuntu natty main
deb /tinyos oneiric main
终端输入命令:sudo gedit/etc/apt/sources.list(sources.list是只读文件,所以必须有root 权限)
②.下载安装tinyos-2.1.1
终端输入命令:sudo apt-get install tinyos-2.1.1
安装完成后,打开/opt/tinyos-2.1.1/support/make/sim.extra,找到PYTHON_VERSION=2.5(本机),将2.5换成2.7
③.终端输入命令:sudo gedit/opt/tinyos-2.1.1/tinyos.env,在tinyos.env中添加
④.在主文件夹/.bashrc中添加:
source/opt/tinyos-2.1.1/tinyos.env
export CLASSPATH=$TOSROOT/support/sdk/java/tinyos.jar:.
⑤.在/etc/profile.d/tinyos.env同样添加:
终端输入命令:sudo gedit/etc/profile.d/tinyos.env
⑥.安装JNI
终端输入命令:tos-install-jni
终端输入命令:tos-check-env
会出现java和graphviz版本报错,可以忽略。
如下图:
⑦.进入目录/opt/tinyos-2.1.1/apps/Blink中,进行make micaz sim如果出现下面图片证明,安装成功。