pdf

nesc编程入门

  • 1星
  • 日期: 2017-03-07
  • 大小: 327.73KB
  • 所需积分:1分
  • 下载次数:4
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: nesc

nesc编程迷你教学

文档内容节选

nesC 编程迷你教程 寿颜波 Universit de FrancheComt France 内容目录 1 引子1 2 基础概念2 21 接口interface2 22 命令与事件Command and Event3 23 模块与配置Model and Configuration3 231 模块4 232 配置5 233 可以提供接口的配置组件6 234 任务和事件9 3 工作环境10 4 编程开发11 41Blink11 42TempRadio12 421 数据的采集与发送14 422 数据的接收19 5TOSSIM 仿真24 51 使用 TOSSIM 编译 nesC 程序24 52 捕捉生成运行记录24 53 仿真25 54 运行中的变量值26 6 结束语27 1 引子 目前在研究领域有多款针对无线传感器网络开发的操作系统,其中最为著名的项目之一 便是 TinyOS它最早由美国 Berkeley 大学负责开发和维护,并且支持多种传感器平台, 例如在研究领域广泛使用的 mica 系列传感器节点和 telos 系列在本教程的编写过程当中, 我们统一使用 Crossbow 公司开发的......

nesC 编程迷你教程 寿颜波 @ Université de Franche-Comté, France 内容目录 1 引子...................................................................................................................................................1 2 基础概念...........................................................................................................................................2 2.1 接口(interface)......................................................................................................................2 2.2 命令与事件(Command and Event)......................................................................................3 2.3 模块与配置(Model and Configuration)...............................................................................3 2.3.1 模块....................................................................................................................................4 2.3.2 配置....................................................................................................................................5 2.3.3 可以提供接口的配置组件................................................................................................6 2.3.4 任务和事件........................................................................................................................9 3 工作环境.........................................................................................................................................10 4 编程开发.........................................................................................................................................11 4.1Blink..........................................................................................................................................11 4.2TempRadio................................................................................................................................12 4.2.1 数据的采集与发送..........................................................................................................14 4.2.2 数据的接收......................................................................................................................19 5TOSSIM 仿真...................................................................................................................................24 5.1 使用 TOSSIM 编译 nesC 程序................................................................................................24 5.2 捕捉、生成运行记录..............................................................................................................24 5.3 仿真..........................................................................................................................................25 5.4 运行中的变量值......................................................................................................................26 6 结束语.............................................................................................................................................27 1 引子 目前在研究领域有多款针对无线传感器网络开发的操作系统,其中最为著名的项目之一 便是 TinyOS。它最早由美国 Berkeley 大学负责开发和维护,并且支持多种传感器平台, 例如在研究领域广泛使用的 mica 系列传感器节点和 telos 系列。在本教程的编写过程当中, 我们统一使用 Crossbow 公司开发的 telosb 节点。 TinyOS 完全由 nesC 编写,nesC 全名 Network Embedded System C,它可以被看作 是 C 语言的近亲,在语法上和 C 语言有非常多的相似之处,如果你有 C 语言的编写基础,那 么针对 nesC 的学习就会变得轻松很多。nesC 主要是为事件驱动编程而设计的,它也是我们 开发 TinyOS 应用程序的主要编程语言。 本文档的目的在于向读者展示 TinyOS 的基本运作模式,并且让读者可以在最短的时间 1/28 掌握 TinyOS 下程序开发的要领。而且在编写过程当中,作者假设读者已经具备了基本的编 程经验。如果你需要更为详细的 nesC 参考资料,可以查阅 TinyOS 官方网站上面的教程, 或者阅读 Philip Levis 编写的 TinyOS Programming Manual。 因为已经很久没用使用中文编写文档,所以文档中的一些语句可能显得生硬。而且因为 时间关系,文档中肯定还有不少的错误。如对你的学习过程造成困扰,再次先表示歉意。 2 基础概念 在开始正式学习 nesC 编程之前,我们需要先学习 nesC 的几个比较重要的概念。相对 于其他编程模式,例如面向过程编程和面向对象编程,事件驱动编程,或者是面向事件编程 显得比较特别,尤其是在无线传感器网络当中。因为无线传感器节点的程序储存空间十分有 限,而且通常采用电池供电,所以要求我们的程序必须短小、精炼、高效。 2.1 接口(interface) 一个完整的 nesC 程序是由一系列组件构成的,这些组件彼此之间通过事先定义好的接 口进行沟通,从而协调程序各部分间的合作。与 Java 语言相似,在一个接口的内部,我们 定义一系列相关的方法,也就是相当于 C 语言中的函数。在下面的代码中我们给出一个简单 的例子,Read 接口。该接口主要用来读取某一个环境数据(温度、湿度等)。它只包含两 个函数,用于读取数值的 read 和表示读取结束的 readDone。 01 interface Read { 02 /** 03 * Initiates a read of the value. 04 * 05 * @return SUCCESS if a readDone() event will eventually come back. 06 */ 07 command error_t read(); 08 /** 09 * Signals the completion of the read(). 10 * 11 * @param result SUCCESS if the read() was successful 12 * @param val the value that has been read 13 */ 14 event void readDone( error_t result, val_t val ); 15 } 2/28 我们可以看到接口内的函数只包含了函数的声明,但是并不包含函数体,也就是说它们 是空的!接口需要被某一个 nesC 组件实现才能具备真正的执行能力,如果一个接口没有被 实现,那它就不具备实用价值。 负责实现某一个接口的 nesC 组件称之为该接口的提供者,而需要使用该接口的程序组 件,则成为这一组件的使用者。当我们开发一个 nesC 程序的时候,我们需要首先考虑以下 几个问题: • 我们的程序需要实现哪几种功能? • 哪些功能是可以通过使用 TinyOS 自带的接口来实现的? • 实现这些接口的组件又是哪些? • 哪些功能是需要定义属于我们自己的接口? 同一个接口可以由不同的组件来实现,例如我们此前提到过的,关于环境数据读取的问 题。我们知道我们需要通过使用 Read 接口来读取温度,但是如果传感器平台不同,Read 接 口的提供者就未必相同。例如 telosb 节点和 micaz 节点未必使用同一组件来提供 Read 接 口。 2.2 命令与事件(Command and Event) 在此前的例子当中,有的读者可能已经注意到,read 和 readDone 两个函数采用两个 不同的前置关键字,command 和 event。命令和事件是 nesC 中两种函数类型。命令类型的 函数由接口的提供者负责实现。有别于 C 语言中的函数呼叫,我们需要等待函数运行结束, 才能继续执行接下去的指令。 在 TinyOS 中,我们推崇一种叫做 Split-Phase 的程序运作模式,也就是说将一项任务 分为任务的投递、执行和反馈三个步骤。当我们呼叫一个命令时,该项任务就被投递到一个 任务执行序列当中,等待逐一被系统执行。而主进程不会被锁死,可以继续执行接下去的指 令。当此投递的任务被成功执行时,任务会返回一个事件给主进程,以告知任务运行结束。 相反事件类型的函数则由接口的使用者负责实现,因为在接口的使用者呼叫一个命令之后, 使用者需要等待命令返回的事件,并且在事件函数内对返回的数据进行处理。关于 nesC 编 程中事件和任务的控制,将在稍后的小节中介绍。 我们举一个比较具体点的例子,某一个 nesC 程序有两个组件构成,A 和 B。A(使用 者)想读取环境温度,所以它就需要使用接口 Read,而 Read 接口由 B 组件来实现,B 就是 接口的提供者。A 呼叫接口 Read 的 read 命令,然后继续忙自己的工作。B 通过接口收到该 呼叫,开始调用传感器节点上的硬件设备读取温度。一旦温度读取工作完成,B 就发送一个 readDone 事件给 A。A 作为接口 Read 的使用者,需要实现接口内的 readDone 事件。在该 事件内部,A 取得读取的温度值,然后再计划下一步的工作。 2.3 模块与配置(Model and Configuration) nesC 程序由两种类型的组件构成:模块和配置。 3/28 2.3.1 模块 在模块类组件主要包含了对它所操作接口的实现。如果一个模块使用了某个接口,则需 要实现该接口内的所有事件函数,如果它提供某个接口,则需要实现该接口的所有命令函数。 下面是例程 Blink 中的 BlinkC 模块的源代码,其主要功能是让传感器节点上的三枚发光二 极管(LED)按照不同的频率闪烁。 01 // BlinkC.nc 02 #include "Timer.h" 03 04 module BlinkC @safe() 05 { 06 uses interface Timer as Timer0; 07 uses interface Timer as Timer1; 08 uses interface Timer as Timer2; 09 uses interface Leds; 10 uses interface Boot; 11 } 12 implementation 13 { 14 event void Boot.booted() 15 { 16 call Timer0.startPeriodic( 250 ); 17 call Timer1.startPeriodic( 500 ); 18 call Timer2.startPeriodic( 1000 ); 19 } 20 21 event void Timer0.fired() 22 { 23 dbg("BlinkC", "Timer 0 fired @ %s.\n", sim_time_string()); 24 call Leds.led0Toggle(); 25 } 4/28 26 27 event void Timer1.fired() 28 { 29 dbg("BlinkC", "Timer 1 fired @ %s \n", sim_time_string()); 30 call Leds.led1Toggle(); 31 } 32 33 event void Timer2.fired() 34 { 35 dbg("BlinkC", "Timer 2 fired @ %s.\n", sim_time_string()); 36 call Leds.led2Toggle(); 37 } 38 } • • • • 04-11 行:模块的声明。我们可以看到该模块总共需要使用 5 个接口,其中 3 个计时 器(Timer)接口。每个计时器控制一枚 LED。Leds 接口中包含了我们点亮和熄灭 LED 所需的命令函数,而 Boot 接口中则负责控制传感器节点的启动。 12-38 行:所使用的接口的事件函数的实现。 14-19 行:在一般情况下,booted 是程序接收到的第一个事件,表示我们的传感器 节点已经正常启动。通常我们在 booted 事件函数内放置初始化代码。对于 Blink 程 序,当节点启动的时候,我们需要通过呼叫 startPeriodic 命令函数来初始化三个 计时器,让它们以不同的时间间隔开始计时。注意呼叫一个命令函数,我们需要使用 call 关键字。 21-25 行,27-31 行,33-37 行:针对三个计时器的 fired 事件函数的实现。当 timer0 被激活时,我们变更 0 号 LED 的状态(点亮或者熄灭)。timer1 和 timer2 同理。 就目前而言,当读者尝试去理解这段程序时,不要太过拘泥于一些语法上的细节,把注 意力集中在程序的总体构成上。 2.3.2 配置 在此前的一个小节当中,我们列举出了 BlinkC 模块所需的各种接口。正如此前我们所 说的,一个接口必须被实现,也就是说必须找到提供该接口的组件(提供者),不然该接口 无法真正接受任何工作。所以一个完整的 nesC 程序还需要另外一类组件:配置,主要负责 将接口的使用者和提供者紧密联系起来。 01 configuration BlinkAppC{} 5/28
更多简介内容

推荐帖子

直播 FAQ|美信 IO-Link 解决方案
直播主题:美信 IO-Link 解决方案   内容简介: IO-Link是首个开放式、现场总线无关、低成本、点对点的串行通信总线协议,用于与传感器及执行器通信,已经被采纳为国际标准(IEC 61131-9)。美信公司基于IO-Link技术开发了各种产品,有效地帮助客户解决系统设计难题。在本次研讨会中,美信详细讨论了IO-LINK技术并介绍美信公司的IO-Link传感器、收发器产品
EEWORLD社区 RF/无线
无线传感器节点电源的解决方案
      传感器节点是要长期工作的,经常地更换电池既费时、又费力,在很多场合下也是不切实际的,它也不能像通常便携式产品那样经常地充电。因此,寻找新的、适合无线传感器节点使用的电源势在必行。在诸多电源中,电池仍是人们的首选,主要是高能量密度的一次性电池,其主要限制是它的体积和成本。此外,人们也在研发更有效的替代产品,这样,一类能从周围环境中提取能量的能源装置受到人们的青睐。本文主要介绍小型、低功率
Jacktang RF/无线
手机锂电池基本性能科普和参数测试
手机锂电池是手机的重要组成部分,它的性能直接影响着手机的使用,因此了解手机锂电池的相关基础知识是很有必要的。手机锂电池的使用除了要注意不能过充过放之外,电池短路、温度过高等因素也会影响手机锂电池的性能。另外对于电池的一些基础知识和参数、测试也可以多加了解一下,有助于更好地维护手机锂电池,提供电池使用寿命。 影响手机锂电池性能的因素 电池短路:短路会给手机锂电池带来不同程度的后果,如电解液升
kzt-wdz凯智通 综合技术交流
TMS320C28x系列TMS320F2837x开发板的蜂鸣器、直流电机和步进电机接口
处理器 TI TMS320F2837x单/双核具有200MHz的高速处理能力,双核拥有多达12路的PWM输出。以下分别是TMS320F2837x单/双核CPU资源框图: 蜂鸣器 本开发板搭载有无源蜂鸣器,可以发出不同频率的声音,接口定义如下图: 直流电机和步进电机接口 板载1个直流电机(2pin)和1个五线四相步进电机(5pin),采用
火辣西米秀 【微控制器 MCU】
分享一个MSP430G2系列驱动DS18B20的例子
#include #include  "stdio.h"   #define uint unsigned int  #define uchar unsigned char #define DS18B20       BIT3 #define DS18B20_H     P2OUT |= BIT3 #define DS18B20_L     P2OU
Jacktang 【微控制器 MCU】
直播 FAQ|美信 IO-Link 解决方案
直播主题:美信 IO-Link 解决方案   内容简介: IO-Link是首个开放式、现场总线无关、低成本、点对点的串行通信总线协议,用于与传感器及执行器通信,已经被采纳为国际标准(IEC 61131-9)。美信公司基于IO-Link技术开发了各种产品,有效地帮助客户解决系统设计难题。在本次研讨会中,美信详细讨论了IO-LINK技术并介绍美信公司的IO-Link传感器、收发器产品
EEWORLD社区 RF/无线

评论

登录/注册

意见反馈

求资源

回顶部

datasheet推荐 换一换

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })