nesC编程迷你教程.doc

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
nesC编程迷你教程

nesC编程迷你教程 寿颜波@Université?de?Franche-Comté,?France 内 容 目 录 1引子 1 2基础概念 1 2.1接口(interface) 1 2.2命令与事件(Command and Event) 3 2.3模块与配置(Model and Configuration) 3 2.3.1模块 3 2.3.2配置 6 2.3.3可以提供接口的配置组件 7 2.3.4任务和事件 10 3工作环境 12 4编程开发 13 4.1Blink 13 4.2 TempRadio 15 4.2.1数据的采集与发送 16 4.2.2数据的接收 23 5 TOSSIM仿真 29 5.1使用TOSSIM编译nesC程序 29 5.2捕捉、生成运行记录 30 5.3仿真 30 5.4运行中的变量值 32 6结束语 33 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。 因为已经很久没用使用中文编写文档,所以文档中的一些语句可能显得生硬。而且因为时间关系,文档中肯定还有不少的错误。如对你的学习过程造成困扰,再次先表示歉意。 2基础概念 在开始正式学习nesC编程之前,我们需要先学习nesC的几个比较重要的概念。相对于其他编程模式,例如面向过程编程和面向对象编程,事件驱动编程,或者是面向事件编程显得比较特别,尤其是在无线传感器网络当中。因为无线传感器节点的程序储存空间十分有限,而且通常采用电池供电,所以要求我们的程序必须短小、精炼、高效。 2.1接口(interface) 一个完整的nesC程序是由一系列组件构成的,这些组件彼此之间通过事先定义好的接口进行沟通,从而协调程序各部分间的合作。与Java语言相似,在一个接口的内部,我们定义一系列相关的方法,也就是相当于C语言中的函数。在下面的代码中我们给出一个简单的例子,Read接口。该接口主要用来读取某一个环境数据(温度、湿度等)。它只包含两个函数,用于读取数值的read和表示读取结束的readDone。 我们可以看到接口内的函数只包含了函数的声明,但是并不包含函数体,也就是说它们是空的!接口需要被某一个nesC组件实现才能具备真正的执行能力,如果一个接口没有被实现,那它就不具备实用价值。 负责实现某一个接口的nesC组件称之为该接口的提供者,而需要使用该接口的程序组件,则成为这一组件的使用者。当我们开发一个nesC程序的时候,我们需要首先考虑以下几个问题: ?我们的程序需要实现哪几种功能? ?哪些功能是可以通过使用TinyOS自带的接口来实现的? ?实现这些接口的组件又是哪些? ?哪些功能是需要定义属于我们自己的接口? 同一个接口可以由不同的组件来实现,例如我们此前提到过的,关于环境数据读取的问题。我们知道我们需要通过使用Read接口来读取温度,但是如果传感器平台不同,Read接口的提供者就未必相同。例如telosb节点和micaz节点未必使用同一组件来提供Read接口。 2.2命令与事件(Command and Event) 在此前的例子当中,有的读者可能已经注意到,read和readDone两个函数采用两个不同的前置关键字,command和event。命令和事件是nesC中两种函数类型。命令类型的函数由接口的提供者负责实现。有别于C语言中的函数呼叫,我们需要等待函数运行结束,才能继续执行接下去的指令。 在TinyOS中,我们推崇一种叫做Split-Phase的程序运作模式,也就是说将一项任务分为任务的投递、执行和反馈三个步骤。当我们呼叫一个命令时,该项任务就被投递到一个任务执行序列当中,等待逐一被系统执行。而主进程不会被锁死,可以继续

文档评论(0)

kakaxi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档