How_to_Code_on_TinyOS
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的安装方法
Windows环境下安装TinyOs的方法第一步: Install Java 1.5 JDKWindowsDownload and install Sun's 1.5 JDK from .安装jkd环境变量设置如下:变量名变量值path C:\Program Files\Java\jdk1.5.0_11\binjava_home C:\Program Files\Java\jdk1.5.0_11classpath C:\Program Files\Java\jdk1.5.0_11\lib\tools.jar;C:\ProgramFiles\Java\jdk1.5.0_11\jre\lib\rt.jarWARNING: CLASSPA TH may not include '.' (that is, the symbol for the current working directory). Please add '.' to your CLASSPA TH or you may experience configuration problem.问题解决方法:1.CLASSPA TH=`.:$TOSROOT/tools/java/javapath`2..;C:\tinyos\jdk1.4.1_02\j2sdk1.4.1_02\bin;C:\tinyos\jdk1.4.1_02\j2sdk1.4.1_02\lib\tools.jar第二步: Install CygwinThis step is required for Windows installations only. If you are installing on Linux, skip to step 3. We have put online the cygwin packages that we've confirmed to be compatible with TinyOS. The instructions below use those packages. Y ou can also upgrade your cygwin environment according to the instructions at and your environment will most likely work. A large number of TinyOS users, upgrade their cygwin packages at least monthly from cygnus. However, since we can't test what packages are compatible as they become available daily, we can't confirm that today's set will work.1.Download and install Cygwin from .2.Download the confirmed-compatible cygwin packages from the tinyos web site here.3.In a cygwin shell, unzip the above package into some directory. In these instructions the directory is /cygdrive/c/newcygpkgs.$ cd /cygdrive/c/newcygpkgs$ tar zxvf cygwin-1.2a.tgzThis unzips the packages.4.In Windows Explorer, navigate to /cygdrive/c/newcygpkgs and click on the file setup.exe. Setup.exe is the setup program distributed by Cygnus Solutions.5.Follow these steps when the Cygwin Setup windows appears:Opt to disable the virus scanner (it will be enabled when you're finished).Opt to Install from Local Directory.6.Specify the Root directory to be where your current cygwin installation is. This would be the directory that directories like 'opt' and 'usr' are in. For example, mine is rooted at c:\tinyos\cygwin, so I enter that.7.Select to Install for All Users8.Select the Unix file type (very important!)9.For the Local Packages Directory, specify where you unzipped the cygwin packages tarfile. For example, I would specify c:\newcygpkgs. (The setup.exe program will probably select the right default directory.)10.The next window will allow you to select packages to install. Y ou should see that most of the packages have an X-ed box next to them; these are the packages that are to be installed.11.Click install. Some notes:Y ou might see a message explaining that you need to reboot because some files are in use. This most likely means that your cygwin DLL is loaded and in-use and, therefore, cannot be replaced. When you reboot, the new DLL will be loaded.Related to the above warnings, if you see warnings about the cygwin1.dll not being found, don't worry. All will be well once you reboot and the right DLL is loaded.第三步:Download and install Sun's m package在cygwin下unzip javacomm20-win32.zipcd commapicp win32com.dll "C:\Program Files\Java\jdk1.5.0_11\jre\bin"chmod 755 "C:\Program Files\Java\jdk1.5.0_11\jre\bin\win32com.dll"cp comm.jar "C:\Program Files\Java\jdk1.5.0_11\jre\lib\ext"cp m.properties "C:\Program Files\Java\jdk1.5.0_11\jre\lib"第四步Install native compilersInstall the appropriate version of the following (Windows or Linux, avr or msp430 or both) with the rpm command 'rpm -ivh '. On windows, if you get an error claiming that the rpm was build for an NT computer and you're on a windows NT computer, bypass the erroneous error by using 'rpm -ivh --ignoreos rpmname'. (We have xscale compiler tools online at /dist-1.2.0/tools/ but they have not yet been extensively tested by a large community.)Atmel AVR ToolsTool Windows/Cygwin Linuxavr-binutils†avr-binutils-2.15tinyos-3.cygwin.i386.rpm avr-binutils-2.15tinyos-3.i386.rpm avr-gcc avr-gcc-3.4.3-1.cygwin.i386.rpm avr-gcc-3.4.3-1.i386.rpmavr-libc avr-libc-1.2.3-1.cygwin.i386.rpm avr-libc-1.2.3-1.i386.rpmavarice avarice-2.4-1.cygwin.i386.rpm avarice-2.4-1.i386.rpminsight(avr-gdb)avr-insight-6.3-1.cygwin.i386.rpm avr-insight-6.3-1.i386.rpm†If you receive an rpm error that indicates that you have a newer version already installed, try rpm -Uvh --force第五步Install TinyOS toolchainThe TinyOS-specific tools are the NesC compiler and a set of tools developed in the tinyos-2.x/tools source code repository. They are also installed using rpms. If you using the Cygwin version recommended in these install instructions, you should install the "Recommended" Windows/Cygwin nesC RPM. If you get strange errors when you try to compile TinyOS programs, such as the error message "the procedure entry point basename could not be located in the dynamic link library cygwin1.dll", this is likely due to a Cygwin version incompatibility: try the "Other" Windows/Cygwin RPM (1.2.7a). If you are using Cygwin and installing the nesC RPM causes an error that the RPM was built for Cygwin, add the --ignoreos option.TinyOS-specific ToolsTool RecommendedWindows/CygwinOther Windows/Cygwin Linux CommandNesC nesc-1.2.8a-1.cygwin.i386.rpmnesc-1.2.8b-1.cygwin.i386.rpmnesc-1.2.8a-1.i386.rpmrpm-Uvhrpm-Uvh--ignoreos (ifCygwincomplains)tinyos-t ools tinyos-tools-1.2.3-1.cygwin.i386.rpmtinyos-tools-1.2.3-1.cygwin.i386.rpmtinyos-tools-1.2.3-1.i386.rpmrpm-ivh--force (1.x tree)rpm-Uvh (no1.x tree)第六步Install the TinyOS 2.x source treeNow that the tools are installed, you need only install the tinyos 2.x source tree and then set your environment variables. Install the appropriate version of the following (Window or Linux) with the rpm command 'rpm -ivh '. As with the previous rpms, if you get an error claiming that the rpm was build for an NT computer and you're on a windows NT computer, bypass the erroneous error by using 'rpm -ivh --ignoreos rpmname'.∙Install tinyos-2.xTinyOS 2.xWindows/Cygwin LinuxTinyOS tinyos-2.0.1-5.cygwin.noarch.rpm tinyos-2.0.1-5.noarch.rpm ∙Configure your environmentIdeally, you'll put these environment variables in a shell script that will run when yourshell starts, but you needn't put such a script under /etc/profile.d.The example settings below assume that the tinyos-2.x installation is in /opt/tinyos-2.x.Change the settings to be correct for where you've put your tinyos-2.x tree. Note that thewindows CLASSPATH must be a windows-style path, not a cygwin path. You cangenerate a windows style path from a cygwin-style path using 'cygpath -w'. For example:export CLASSPATH=`cygpath -w$TOSROOT/support/sdk/java/tinyos.jar`export CLASSPATH="$CLASSPATH;."TinyOS 2.xEnvironment VariableWindows Linux TOSROOT /opt/tinyos-2.x same as in Cygwin TOSDIR $TOSROOT/tos same as in CygwinCLASSPAT H C:\tinyos\cygwin\opt\tinyos-2.x\support\sdk\java\tinyos.jar;.$TOSROOT/support/sdk/java/tinyos.jar:.MAKERULES$TOSROOT/support/make/Makerules same as in CygwinPATH†/opt/msp430/bin:$PATH same as in Cygwin†Only necessary if you're using the MSP430 platform/tools.In addition to the above environment variables, do the following on Linux machines:1.Change the ownership on your /opt/tinyos-2.x files: chown -R <youruid> /opt/tinyos-2.x2.Change the permissions on any serial (/dev/ttyS<N>), usb (/dev/tts/usb<N>,/dev/ttyUSB<N>), or parallel (/dev/parport) devices you are going to use:chmod 666 /dev/<devicename>Finally, if you have installed TinyOS 2.0.1, there is a bug in TOSSIM (which will be fixed in 2.0.2). The bug is in file tos/chips/atm128/sim/atm128_sim.h. Change these lines 22 and 23 from:#define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + 0x20)#define _SFR_IO16(io_addr) _MMIO_WORD((io_addr) + 0x20) to#define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr))#define _SFR_IO16(io_addr) _MMIO_WORD((io_addr)) If you do not do this, then timers will not work correctly.第七步Installing GraphvizGo to download page of the Graphviz project and download the appropriate RPM. Y ou only need the basic graphviz RPM (graphviz-); you don't need all of the add-ons, such as -devel, -doc, -perl, etc. If you're not sure what version of Linux you're running,uname -amight give you some useful information. Install the rpm with rpm -i rpm-name. In the case ofWindows, there is a simple install program, so you don't need to deal with RPMs. 下载1.10版/tos/dist-1.1.0/tools/windows/graphviz-1.10.exeand install it by executing it.第八步在/etc/profile.d下建立tinyos.sh文件内容如下:export TOSROOT=/opt/tinyos-2.xexport TOSDIR=$TOSROOT/tosexport CLASSPA TH=`cygpath -w $TOSROOT/support/sdk/java/tinyos.jar` export CLASSPA TH="$CLASSPA TH;."export MAKERULES=$TOSROOT/support/make/Makerulestype java >/dev/null 2>/dev/null || PA TH='/usr/local/bin/locate-jre --java':$PA TH type javac >/dev/null 2>/dev/null || PA TH='/usr/local/bin/locate-jre --javac':$PA TH echo $PA TH | grep -q /usr/local/bin || PA TH=/usr/local/bin:$PA TH第九步Tos-check-env。
TinyOS操作系统开发技术及实践(西电版)第1章 TinyOS概述_OK
2021/6/30
10
10
第1章 TinyOS概述
版本 0.4.3 0.6.x 1.0 1.1.x
2.0 Beta
2.0.1 2.0.2 2.1.0 2.1.1 2.1.2 2021/6/30
时间 2000 年
2001 2002 年 9 月 2003 年 8 月
2006 年 2 月
2007 年 4 月 2007 年 7 月 2008 年 8 月 2010 年 4 月 2012 年 8 月
表 1-2 TinyOS 的版本变化
说明 通过 向公众开放 支持 mica 平台,期间 UBC 发布了支持 1000mica 平台的 TinyOS 项目, 2002 年 4 月 UCB 与 Intel 研究进行 nesC 语言开发合作 使用 nesC 语言重新编写并改进了 TinyOS nesC 增加部分新功能(如支持并发模型);TinyOS 增加新的 UART 通 信协议等 2.0 Beta1 发布,2.0 与 1.x 不再兼容,后者编写的代码将无法在 2.0 上编译通过;2.0 硬件抽象遵循 3 级结构;改进了任务调度策略;2.0 提 供了比 1.x 更丰富的定时器接口 增加 CC2420 低功耗协议栈;改进组件和接口的资源管理;增加 lib/printf 库;增加 lib/net/lqi 库;修复部分 BUG 重新实现了 CC2420 低功耗协议栈;修复部分 BUG 增加对 IRIS 和 shimmer 平台的支持;增加对 802.15.4 T-Frames 帧的 支持;增加低功耗应用开发指导 增加对 shimmer2、mulle、epic 平台的支持;增加 6LoWPAN/IP 协议 栈;改进 python SDK 增加 RPL 协议栈;增加对 ucmini、ATMega128RFA1、Zolertia Z1 平 台的支持;增加 CoAP 协议栈
第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 CNTTORFMANDLEDS 应用程序 .......................................................................36 2 INTTORFM:发送信息 .....................................................................................39 3 INTTORFMM:实现网络通信..........................................................................41 4 GENERICCOMM 网络堆栈.................................................................................42 5 使用 RFMTOLEDS 接收消息 ............................................................................42 6 一些细节问题...................................................................................................42 7 练习...................................................................................................................43
鸿蒙4.0部件编译方法
鸿蒙4.0部件编译方法
鸿蒙(HarmonyOS)是华为公司推出的一种分布式操作系统。
如
果你想了解如何编译鸿蒙4.0部件,我可以为你提供一些基本的信息。
首先,编译鸿蒙4.0部件需要使用特定的开发工具和环境。
以
下是一般的步骤:
1. 准备开发环境,首先,你需要安装适用于鸿蒙的开发工具链
和相关的依赖库。
这可能包括安装特定版本的JDK(Java开发工具包)、CMake(交叉平台的自动化构建系统)、Ninja(快速的构建
系统)、Git(版本控制系统)等。
2. 获取源代码,你需要从官方的代码仓库或其他适当的渠道获
取鸿蒙4.0部件的源代码。
这可能涉及使用Git工具来克隆代码库
或者下载压缩文件。
3. 配置编译环境,在获取源代码后,你需要根据具体的部件和
目标平台配置编译环境。
这可能包括设置环境变量、编辑配置文件、选择编译选项等。
4. 运行编译命令,一旦环境配置完成,你可以运行适当的编译
命令来编译鸿蒙4.0部件。
这可能涉及使用CMake来生成构建文件,然后使用Ninja来执行实际的编译过程。
需要注意的是,具体的编译方法可能因部件的不同而有所不同。
因此,在实际操作时,你可能需要查阅官方文档或特定部件的开发
指南来获取更详细的信息。
另外,鸿蒙的开发工具和编译流程可能
会随着版本的更新而有所变化,因此建议在编译之前查阅最新的文
档和指南。
希望这些信息能对你有所帮助。
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安装步骤
Micaz节点的Tinyos系统安装安新升说明:为了留底也锻炼大家的动手能力,我写了这个文档,里面有我做的时候的步骤和需要注意的问题,算是比较详细了,文档中有问题的话可找我一起讨论!首先,介绍一下Tinyos,TinyOS是UC Berkeley(加州大学伯克利分校)开发的开放源代码操作系统,专为嵌入式无线传感网络设计;但是与一般系统不同的是,Tinyos不能安装在Winsows系统中,它是在LINUX系统下的进行开发的系统,所以它的安装分为两种:(1)在WINDOWS XP 下安装cgwin,再在cgwin中安装Tinyos,所以cgwin的作用只是一个平台(2)安装一个LINUX 系统——ubuntu,在ubuntu下安装Tinyos,个人感觉cgwin中安装比较复杂,而且接触一下ubuntu进行LINUX开发也是件好事,所以我选择的后者,下面的介绍也是这种方法。
我的系统是WIN7.言归正传,说一下安装步骤:第一步:划分出一块新的磁盘空间,20G左右,建立一个新磁盘,也就是看着哪个磁盘可用空间比较大,拿出点来建立一个新的压缩卷。
注意:(1)划分磁盘空间时,先要拿出空间的磁盘是不是NTFS格式,不是的要转到NTFS格式,如果是FAT32格式,划分出新的磁盘空间后,原磁盘会被格式化。
,千万注意!!!!实在不放心的话,就备份一下要划分的磁盘。
转换方法见/article/0eb457e57c08df03f1a905f0.html (2)不要划分系统盘,否则会引起原系统不稳定。
划分磁盘空间方法:/article/91f5db1bd31dec1c7f05e392.html第二步:假设大家都已经划分好了磁盘空间,下面就是安装LINUX系统-Ubuntu(1)现在已经出到Ubuntu14.04,但是安装起来不好安装,我用的是Ubuntu12.04,桌面版(desktop),下载时注意如多你的电脑是64位,则下载/precise/ubuntu-12.04-desktop-amd64.iso,如果是32位,则下载/precise/ubuntu-12.04-desktop-i386.iso (2)可以使用镜像工具打开镜像文件,从里面提取出 Wubi.exe 安装程序。
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综述
无线传感器网络(Wireless Sensor Networks,WSN)是现代传感技术和无 线通信技术的结合体。在WSN中,大量的低功耗、低成本、紧凑型传感器节点以 自组织和多跳的方式进行通信,收集和处理环境信息,以实现各种应用,如环境 监测、军事侦察、智能家居等。为了有效管理和协调这些节点,需要一个相应的 操作系统。TinyOS就是一种专为WSN设计的开源、分布式、事件驱动的操作系统。
通信机方面,TinyOS支持多种无线通信协议,如ZigBee、IEEE 802.15.4 等。它采用了轻量级的通信协议栈,实现了高效、可靠的无线通信,并降低了功 耗。
TinyOS应用程序开发
使用TinyOS开发应用程序需要对TinyOS的编程模型有一定的了解。TinyOS 应用程序的基本结构包括硬件配置、任务定义、事件处理和通信协议等几个部分。
TinyOS内核分析
TinyOS的内核主要包括任务管理、内存分配和通信机制等几个部分。
任务管理方面,TinyOS采用了基于任务的调度模式,每个任务都有自己的优 先级和调度参数。系统根据任务的优先级和调度参数动态地调度任务执行,同时 通过任务间的同步和通信机制来实现协同工作。
内存分配方面,TinyOS采用了静态内存分配方式,每个任务都有自己的内存 空间,避免了对全局内存的竞争访问,提高了系统的效率和可靠性。
3、AI集成:人工智能技术在无线传感器网络中的应用前景广阔。未来 TinyOS可以集成AI算法和模型,实现对传感器数据的智能分析和处理,提高无线 传感器网络的智能化水平。
4、低功耗优化:低功耗一直是无线传感器网络追求的重要指标之一。未来 TinyOS可以通过进一步优化事件驱动机制、节能策略等方面来降低节点功耗,延 长网络寿命。
TinyOS操作系统的实现机制
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安装_物联网关键技术_[共4页]
96
图2-22 TinyOS硬件抽象架构
2.6.4 TinyOS安装
安装TinyOS有两种方式,一种是使用光盘镜像,直接同时安装Linux和TinyOS(将TinyOS与Linux打包好,直接安装系统即可,使用Xubuntos操作系统);另一种是直接在现有的操作系统上进行安装,包括Windows和Linux。
本节主要介绍在Windows上安装TinyOS2.1的过程。
1.安装Java 1.6 JDK
从Java官方网站上下载Java 1.6 JDK,安装在D:\Program Files\Java(安装目录可任选)。
安装完成之后,配置环境变量。
(1)新建系统变量JA V A_HOME:指向JDK的安装路径,在该路径下找到bin、lib等目录,JA V A_HOME=D:\Program Files\Java\jdk1.6.0_
10。
(2)在系统变量中找到Path:将%JA V A_HOME%\bin;%JA V A_HOME%\jre\bin;添加到最前面即可。
(3)新建系统变量CLASSPATH:
设置类的路径
CLASSPATH=.;%JA V A_HOME%\jre\lib\rt.jar;%JA V A_HOME%\lib\tools.jar;%JA V A_HOM
E%\lib\dt.jar。
至此安装过程结束,可以自行编写一个测试程序。
在D盘根目录下新建文件夹javatest,然后创建文本文件,将下面的代码拷入并保存成Test.java文件,注意文件名要与类名相一致。
public class Test。
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
编译micropython固件的方法
编译MicroPython固件的方法MicroPython是一款精简的Python语言实现,它专为嵌入式系统设计。
使用MicroPython,开发者可以利用Python语法来编写嵌入式系统的控制程序,从而简化开发流程。
MicroPython的固件可以通过编译的方式来生成,下面将介绍编译MicroPython固件的方法。
1. 环境准备在开始编译MicroPython固件之前,首先需要准备好编译环境。
通常情况下,MicroPython的固件是在Linux系统下编译生成的,因此需要安装一些必要的软件工具。
具体需要安装的工具包括GCC、Make、Git和其他的一些开发工具链。
在安装完这些工具之后,还需要安装交叉编译工具链,以便能够为目标嵌入式系统生成可执行的固件。
2. 获取MicroPython源码要编译MicroPython固件,首先需要获取MicroPython的源代码。
可以通过Git来获取MicroPython的源代码。
首先在终端中切换到想要存放MicroPython源代码的目录,然后使用以下命令从GitHub上获取MicroPython的源代码:```git clone xxx```这条命令将会把MicroPython的源代码克隆到当前目录下。
3. 配置编译选项在获取了MicroPython的源码之后,需要对编译选项进行配置。
可以通过编辑MicroPython源码目录下的`mpconfigport.h`文件来配置编译选项。
在这个文件中,可以设定一些与目标嵌入式系统相关的编译选项,例如处理器架构、内存大小、外设支持等等。
4. 运行编译命令配置完编译选项之后,就可以运行编译命令来生成MicroPython的固件了。
在MicroPython源码目录下打开终端,输入以下命令:```make```这条命令将会开始编译MicroPython的固件。
编译的过程可能会持续一段时间,取决于所选的编译选项以及计算机的性能。
TinyOS安装问题解决
这是由于cygwin没有安装最新的版本,而在某个文件中调用python2.5-config这个配置文件时出现错误这个文件的目录在C:\cygwin\bin
大量的语法错误和python这个软件的版本未更新到最高有关,需要更新到最高版本
必须先把python2.5全部卸载干净,再安装新的2.6版本
在C:\cygwin\usr\include目录下有python2.x的文件夹,注意卸载前后此文件的变化
卸载步骤,在安装新的cygwin-setup前先打开旧的setup,卸载设置如图设置
卸载完成后查看C:\cygwin\usr\include目录下有python2.5的文件夹没有了,就是卸载成功然后打开新的cygwin安装软件
第一次安装会弹出如下提示框
在安装时注意选择如下
弹出如下提示框表示你的cygwin没有关闭,关闭后即可以继续安装
安装成功后看到make:python2.5-config:Command not found需要在
C:\cygwin\opt\tinyos-2.x\support\make目录下将sim.extra;sim-fast.extra;sim-sf.extra中PYTHON_VERSION=2.5改到2.6
看到关于reent.h文件的语法错误,则需要找到目录中的此文件查看相应行此宏定义的问题
查看定义在_ansi.h文件中如下
定义链接有问题,在reent.h文件中的_EXFNPTR没有找到ahsi.h中的定义,待解决。
安装TinyOS需要六个步骤
安装TinyOS需要六个步骤安装TinyOS需要六个步骤。
1.Installing a Java1."5 JDK.安装java jdk1."5需要配置环境变量2.Install Cygwin.安装Windows下的Linux模拟器,cygwin安装单片机工具,AVR或MSP430,根据自己需要。
安装nesC 和TinyOS_tool5.Installing the TinyOS source tree.安装TinyOS2."0.2主文件。
6.Installing the Graphviz visualization tool安装Graphviz并配置环境变量一.安装JDK1."5下载JDK二.安装Cygwin下装Cygwin-1."2a于http:1."2.0/tools/windows/cygwin-1."2a.tgz这个版本TinyOS官方测试过,和TinyOS兼容度高。
三.安装单片机工具下载以下五个rpm包1.avr-binutils-2."15tinyos-3."cygwin.i386."rpm(http:2."0.0/tools/windows/avr-binutils-2."15tinyos-3.cygwin.i386."rpm)2.avr-gcc-3."4.3-1."cygwin.i386."rpm(http:2."0.0/tools/windows/avr-gcc-3."4.3-1."cygwin.i 386."rpm)3.avr-libcavr-libc-1."2.3-1."cygwin.i386."rpm(http:2."0.0/tools/windows/avr-libc-1."2.3-1.cygwin.i 386."rpm)4.avariceavarice-2."4-1."cygwin.i386."rpm(http:2."0.0/tools/windows/avarice-2."4-1."cygwin.i386."rpm)5.insight(avr-gdb)avr-insight-6."3-1."cygwin.i386."rpm(http:1."2.0/tools/windows/avr-insight-6."3-1."cygwin.i386."rpm)下载完成之后把五个包都拷贝到Cygwin的tmp文件夹(在Windows操作即可)依次安装(要按照顺序安装,它们之间有依赖关系),安装命令如下。
TinyOS在windows中安装步骤
1.TinyOS1.1概要TinyOS应用程序都是有一个或多个组件链接起来,从而形成一个完整的可执行程序.组件中实现了功能接口,同时也能使用其它组件提供的接口。
在接口定义中可以申明命令函数和事件函数,命令函数由接口提供者实现,事件函数由接口使用者实现。
对于一个组件而言,如果它要使用某个组件接口中的命令,它必须实现这个接口的事件。
一个组件可以使用或提供多个接口以及同一个接口的多个实例。
组件有两种类型:模块(module)和配置(configuration)。
模块提供应用程序代码,实现一个或多个接口;配置则是用来将其它组件装配起来,将各个组件所使用的接口与其它组件提供的接口连接在一起,进行导通。
每个应用程序都由一个顶级配置所描述,其内容就是将该应用程序所用到的所有组件导通起来,形成一个有机整体.TinyOS应用程序必须包含Main 组件,Main组件是首先被执行的一个组件。
确切的说,在TinyOS 中执行的第一个命令是Main。
StdControl.init(),接下来是Main.StdControl。
start()。
Main组件完成以下功能:芯片初始化,外围电路初始化,操作系统调度数据结构初始化,子组件初始化,启动子组件件,进入调度死循环从而将控制权交给操作系统,一旦没有任务可以调度就进入休眠状态以降低系统功耗。
TinyOS的调度系统是TinyOS系统的核心部分。
它采用先进先出的排队策略,任务之间不可以抢占,但是中断可以抢占任务,中断是否可以抢占中断则是应用程序自己控制的.即如果中断处理程序进入中断以后执行了关中断的操作,那么这个中断将是不可抢占的,否则在服务的过程中就有可能被抢占掉.另外还要注意,在中断服务程序里面是可以创建任务的。
1.2在Cygwin下的安装在/etc/bash.bashrc文件中增加以下内容:export TOSROOT=/opt/tinyos—2。
xexport TOSDIR=$TOSROOT/tosexport CLASSPATH=C:\cygwin\opt\tinyos—2。
面向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,注意和上图中安装的目录有所差异。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Resources
Gaurav’s TinyOS-1.x installation howto: /~gmathur/misc/tinyos_set up.htm Tinyos-2.x installation howto (straightforward): /tinyos-2.x/doc/html/installtinyos.html The official TinyOS tutorial (pretty good): /tinyos-1.x/doc/tutorial/ The offical TinyOS-2.x tutorial (very good): /tinyos2.x/doc/html/tutorial/index.html nesC: /
HOW TO CODE ON TINYOS
Outlines
What is TinyOS? Hardware & Software NesC A simple example Conclusion
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
TinyOS & nesC Concepts
New Language: nesC. Basic unit of code = Component Component Process Commands Throws Events Has a Frame for storing local state Uses Tasks for concurrency Components provide interfaces Used by other components to communicate with this component
Resources
Other Docs: nesC paper: /~gmathur/tinyos /nesc-pldi-2003.pdf nesC manual: /~gmathur/tinyos /nesc-ref.pdf TinyOS abstractions: /~gmathur/tinyos /tinyosnsdi04.pdf
nesC Keywords
nesC Keywords implementation
Interfaces
Modules
Implement one or more interfaces Can use one or more other interfaces
Modules (Sample)
Configurations
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
Simple Example 1
Blink Application
Blink.nc configuration
Simple Example 1
Blink Application
BlinkM.nc module
Simple Example 2
Communication between two sensors Environment : Wubuntu + TinyOS 2.0 Hardware: TelosB sensors
nesC
Naming conventions nesC files extension: .nc Clock.nc : either an interface (or a configuration) ClockC.nc : a configuration ClockM.nc : a module
Desired OS Properties
Small memory footprint Efficient in power and computation Communication is fundamental Real-time Support diverse application design
The Hardware
Software
TinyOS (Platform) Coding language
NesC (Network Embedded System C)
TinyOS Memory Model
STATIC memory allocation! No heap (malloc) No function pointers No dynamic, run-time allocation Global variables Available on a per-frame basis Conserve memory Use pointers Local variables Saved on the stack Declared within a method
TinyOS Solution
Concurrency: uses event-driven architecture Modularity Application composed of components OS + Application compiles into single executable Communication Uses event/command model FIFO and non pre-emptive scheduling No kernel/application boundary
Байду номын сангаас
Components
Two type of components
Module
component written with code
Configuration
components wired together
Components
TinyOS Application (Sample)
Commands/Events/Tasks
Two components are linked together in nesC by wiring them Interfaces on user component are wired to the same interface on the provider component 3 wiring statements in nesC: endpoint1 = endpoint2 endpoint1 -> endpoint2 endpoint1 <- endpoint2 (equivalent: endpoint2 -> endpoint1)
Reference
nesC paper: /~gmathur/tinyos/ne sc-pldi-2003.pdf
Sensor Hardware Constraints
Lower Power Limited memory Slow CPU Size (Small) Limited hardware parallelisms Communication using radio Low-bandwidth Short range
Configurations (Sample)
nesC Wiring Syntax
Compile & Run
Compiler processes nesC files converting them into a gigantic C file Has both your application & the relevant OS components you are using Then platform specific compiler compiles this C file Becomes a single executable Loader installs the code onto the Mote (Mica2, Telos, etc.)