TinyOS下的NesC编程基础.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TinyOS下的NesC编程基础

TinyOS下的NesC编程基础 NesC为C语言的子集,语法和C语言一致,但是编程思路和程序的构成方面却有着较大的差异。NesC程序主要为事件驱动,通过捕捉系统事件、并且处理事件来完成整个程序的运行。 接口(interface) NesC程序主要由各式组件(component)构成,组件和组件之间通过特定的接口(interface)互相沟通。一个接口内声明了提供相关服务的方法(C语言函数)。例如数据读取接口(Read)内就包含了读取(read)、读取结束(readDone)函数。接口只是制定了组件之间交流的规范,也就是通过某一个接口,只能通过该接口提供的方法实现两个组件之间的交流。但是接口终归只是接口,只是一组函数的声明,并为包含对接口的实现。例如以下便是读取接口的代码: 代码 只有函数的声明,但是没有函数体,所以需要有一个组件来实现(implementation)这个接口。实现某一个接口的组件,称之为提供者(provider),而使用该接口进行对话的,称之为用户(user)。接口内的函数分两类,一类为命令(command),另一类为事件(event)。用户可以呼叫某一组件提供的接口命令,然后等待相应的事件。简单的假设就是:组件A提供了Read接口以便其他组件与之对话,组件B呼叫组件A的Read接口的read命令来读取某一个数据,例如温度,然后等温度读取完毕之后,系统返回一个readDone(读取结束)的事件给组件B。 组件(component) NesC程序由组件构成。组件内主要是包含了对各类接口的使用(uses)和提供(provides)。例如组件A提供了Read接口,那A就需要负责实现Read接口内的read命令,也就是read命令的函数体,即“具体这个值是如何读取出来的”。因为命令(command)是由接口的提供者(provider)负责实现的。如果组件B使用了A提供的Read接口,那在读取数据结束以后,系统会返回给B一个“读取结束”的事件,而B则需要负责处理这个事件,即“数据读取完毕以后,我用这个数据干什么”,将值返回给计算机,或者是通过无线发送给其他传感器等等,所以事件(event)是由接口的使用者(user)来负责实现的。 组件分为两类。分别是模块(module)和配置(configuration)。模块内包含了程序的主干,也就是对各类命令和事件的实现,是NesC程序的可执行代码的主体。而配置则是负责将各个模块,通过特定的接口连接起来,其本身并不负责实现任何特定的命令或者事件。 Blink闪烁发光二极管 以TinyOS附带的Blink(闪烁发光二极管)程序为例: 代码 // BlinkC.nc #includeTimer.h module BlinkC @safe() { usesinterface TimerTMilli as Timer0; usesinterface TimerTMilli as Timer1; usesinterface TimerTMilli as Timer2; usesinterface Leds; usesinterface Boot; } implementation { event void Boot.booted() { call Timer0.startPeriodic(250 ); call Timer1.startPeriodic(500 ); call Timer2.startPeriodic(1000 ); } event void Timer0.fired() { dbg(BlinkC,Timer 0 fired @ %s.\n, sim_time_string()); call Leds.led0Toggle(); } event void Timer1.fired() { dbg(BlinkC,Timer 1 fired @ %s \n, sim_time_string()); call Leds.led1Toggle(); } event void Timer2.fired() { dbg(BlinkC,Timer 2 fired @ %s.\n, sim_time_string()); call Leds.led2Toggle(); } } 代码 //BlinkAppC.nc configuration BlinkAppC { } implementation { components MainC, BlinkC, LedsC; componentsnew TimerMilliC()as Timer0; componentsnew TimerMilliC()as Timer1; compo

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档