云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > nesC编程迷你教程

nesC编程迷你教程

  • 62 次阅读
  • 3 次下载
  • 2025/5/6 11:59:08

密任务前,先将数据和密钥保存入全局变量data和key内。因为任务型函数是不接受任何参数的。最后使用post命令将加密任务投递至任务执行序列当中。 ?07-11行:用于数据加密的任务函数。此处数据加密的算法与过程被略去了,因为不是我们要讲解的重点,在加密完成以后,我们使用signal命令返回encryptDone事件,同时返回保存有计算结果的cipher变量。

在编写我们自己的Split-Phase过程时,要注意格外注意两点。需要注意task函数的复杂程度,因为TinyOS只有一条任务执行序列,如果你向其中投递了一个非常复杂庞大的任务,那会导致后续的任务无法被执行,导致整个系统失去响应。所以当你的task非常负责的时候,建议将其分割成一系列小型的task。也可以使用同一个task,但是需要被处理的数据保存入一个全局数组内,每次只处理其中的一小部分数据。如果数组内的数据尚未被处理完,我们就再次post,如果数据已经被处理完毕,我们就signal运算结束的事件。

最后一点,永远不要在命令函数内signal事件,为了避免在事件函数内,接口的使用者再次呼叫该命令,从而使得整个系统陷入到无尽的函数呼叫循环当中。我们总是在task任务函数内返回一个事件。

3工作环境

到目前为止,我们已经对nesC程序的构成有了简单的理解,现在我们可以开始做些简单的练习了。

在开始写程序之前,自然是需要一个稳定的开发环境。在这里我们有一个好消息和一个坏消息。好消息是在TinyOS的官网上面,他们提供了多种在你电脑上安装、配置TinyOS开发环境的方法;坏消息是这些方法几乎都已经过时,在新版的操作系统下很难为你创建一个良好的开发环境(囧rz)。

TinyOS实质上是一整套由nesC编写的开发包,其主要任务是实现应用程序与底层硬件之间的通讯。对于nesC开发人员,他并不需要关心底层硬件的运作机制,他只需要把他的注意力完全集中到应用层。当我们编译nesC程序的时候,系统会先用nescc将nesC代码翻译成指定传感器平台的C语言代码,然后再用对应的编译器进行真正的编译。例如telosb平台使用的是MSP 430单片机,那系统就会调用msp-gcc进行编译,但如果是micaz节点,就会调用avr-gcc。 通常此类编译器都是由单片机生产厂家直接提供,而且他们对系统的配置也有一定的要求。如果我们尝试把TinyOS安装到最新版的Ubuntu或者Cygwin下面,那十有八九是要出问题的。或者是一开始的时候可以正常工作,但是在一两次系统更新之后,所有系统配置会被重新打乱。

如果你不是Linux配置的高手,那我个人建议还是使用预先配置好的虚拟机。毕竟我们需要的是一个稳定的工作,并且能尽快开展工作,而不是把大把的时间浪费在系统的调试和测试上面。这里向大家推荐的是XubunTOS,是一套基

-12-

于Xubuntu 7.04的VMware虚拟镜像。其内部已经安装配置好了TinyOS 2.1.0,默认编辑器是Emacs。读者可以在TinyOS的官方网站上面找到其下载链接,还可以在我的个人主页上面找到Emacs的基本操作教程。下载完毕之后,只需将其导入到VMware内即可。7.04版的Ubuntu系统早以失去了官方的支持,所以如果你想安装其他的软件会显得比较麻烦。但是目前还有一些第三方软件源在为老版本的Ubuntu系统提供软件支持,我们只需修改/etc/apt/source.lst中的软件源链接即可。

4编程开发

终于可以开始讲解编程了,因为nesC的语法风格和标准C非常相似,所以我们不会花大篇幅讲解语法,而是直接通过更实际的例子来展现nesC程序的编写过程。首先我们会学习如果为telosb节点编译、安装一个nesC程序,然后是编写我们的nesC程序:TempRadio。

4.1Blink

此前在讲解模块与配置的时候,我们已经看过Blink的源代码,这是一个随TinyOS一起发布的例程,很多教程都用它作为例子来讲解TinyOS的应用。Blink程序的源代码可以在/opt/tinyos-2.1.0/app/Blink下找到。

首先我们把Blink目录拷贝至我们的home下面,然后将一个telosb节点用USB电缆连接至PC。在编译、安装Blink之前,我们需要检查,telosb节点是否被成功识别。我们可以使用motelist命令来罗列出所有连接至PC并且被成功识别的传感器节点:

-13-

如果我们对这条命令进行解读,可以读作:为telosb平台编译此程序,并且将其安装至/dev/ttyUSB2的设备上。如果程序被成功编译、安装,我们就会看到telosb节点上的三枚LED开始有规则是闪烁。

如果我们打开Blink自带的Makefile,我们可以看到这个Makefile只包含两条语句。

?01行:整个编译工序的切入口,也是Blink这则程序的根配置组件。 ?02行:将TinyOS自带的编译系统包含进来,继续接下去的编译工作。 TinyOS自带的编译系统非常完善,它可以根据目标平台,自动包含所需的头文件,以及其他编译指令。我们可以在/opt/tinyos-2.1.0/support/make目录下找到TinyOS的整套编译工具。

-14-

4.2 TempRadio

在这个小节当中,我们将学习如何一步一步地构建起我们的第一个nesC程序,TempRadio。读者也可以把它当作是一份小型的家庭作业,因为它包含了nesC编程中的所有基础技术:无线电通讯,串口通讯,温度测量。

这个小程序主要由两部分构成:信号发送部分和信号接收部分。前者被放置在远处,负责读取环境温度,并且把温度值通过无线信号发送回基站。后者则扮演基站的角色,直接和PC通过USB电缆连接,把接收到的温度数据发送回PC。而在PC上面还有另外一个Java程序把温度数值逐一显示出来。

正如我们在教程开头时候所说的一样,在开始真正编写代码之前,我们需要把这则程序所需的全部功能统统列举出来:

?读取环境数据(温度、湿度、光); ?无线通讯; ?串口通讯;

?PC上数据的解读与显示。

我们此前已经说过,在nesC中两个组件如果需要沟通,必须通过特定的接口。假设我们的程序(模块1)想通过天线(模块2)来发送信息,那我们的程序就需要使用接口AMSend。我们的程序(模块1)成为了AMSend的使用者,而天线模块(模块2)则是该接口的提供者。

下面的列表给出了我们这个程序当中所需要用到的全部接口。 ?读取温度:

?Timer:每隔一段时间,读取一次温度。

?Read:对于telosb平台,该接口由SensirionSht11C提供。这也是telosb平台自带的温度检测设备(Sensirion SHT11)。

?无线数据发送:以下三个接口均由ActiveMessageC组件负责提供。 ?Packet:负责管理数据包的接口。

?SplitControl:负责启动、关闭天线的接口。 ?AMSend:该接口的send命令可用于发送数据包。 ?无线数据接收:

-15-

搜索更多关于: nesC编程迷你教程 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

密任务前,先将数据和密钥保存入全局变量data和key内。因为任务型函数是不接受任何参数的。最后使用post命令将加密任务投递至任务执行序列当中。 ?07-11行:用于数据加密的任务函数。此处数据加密的算法与过程被略去了,因为不是我们要讲解的重点,在加密完成以后,我们使用signal命令返回encryptDone事件,同时返回保存有计算结果的cipher变量。 在编写我们自己的Split-Phase过程时,要注意格外注意两点。需要注意task函数的复杂程度,因为TinyOS只有一条任务执行序列,如果你向其中投递了一个非常复杂庞大的任务,那会导致后续的任务无法被执行,导致整个系统失去响应。所以当你的task非常负责的时候,建议将其分割成一系列小型的task。也可以使用同一个task,但是需要被处理的数据保存入一个全局数组内,每次只处理其中的一小部分数据。如果数组内的数据尚

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com