TinyOS学习笔记讲义.doc

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

基础知识 TinyOS体系结构 组件模型module configuration TinyOS是基于构件的微操作系统,采用事件驱动模型,有效的提高了系统的运行效率以及能源合理利用。TinyOS采用nesC语言编写,其应用程序由一个或多个组件连接而成,而组件可以提供和使用接口,组件必须实现其所提供的command接口,并且必须实现其连接组件中申明的事件event接口。接口是程序的实体,实现程序的各功能模块,分为command和event,command接口由组件本身实现,而event接口则由调用者实现,值得注意的是,接口是双向的,调用command接口时必须实现其event接口。 组件又可以细分为模块module和配件。模块亦可分为2个部分,其一,首先申明提供以及使用的接口,如 module BlinkC { uses interface TimerTMilli as Timer0; uses interface Leds; users interface Boot; } 其二,在implementation中模块包含各接口所提供的行为(方法),也包含仅供本模块内部使用的函数,以及申明本模块所具有的事件signal,以及实现其连接或使用的event。 implementation { uint8_t counter = 0; void ledctl() { call Leds.set(counter); } event void Boot.booted() { call Timer0.startPeriodic( 250 ); } event void Timer0.fired() { counter++; ledctl(); } } 配件configuration也可以分为两个部分,和module一样,第一部分是申明可以提供以及使用的接口。第二部分implementation 中首先列出与其相连接模块的名称,使用components标注连接的模块,然后对本配件提供的以及与其相对应模块使用以及提供的接口进行配线,如下例: configuration BlinkAppC { } implementation { components MainC, BlinkC, LedsC,TimerMilliC; BlinkC - MainC.Boot; /////或者写作BlinkC.Boot - MainC.Boot; BlinkC.TimerTMilli -TimerMilliC; BlinkC.Leds - LedsC; } 在TinyOS中存在很多中间配件,这些配件的特点是没有与之相对应的模块,其作用就是根据不同的条件将上层的连接转接到不同的模块上,如下例所示 generic configuration AMSenderC(am_id_t AMId) { provides { interface AMSend; interface Packet; interface AMPacket; interface PacketAcknowledgements as Acks; } } implementation { #if defined(LOW_POWER_LISTENING) components new LplAMSenderC(AMId) as SenderC; #else components new DirectAMSenderC(AMId) as SenderC; #endif AMSend = SenderC; Packet = SenderC; AMPacket = SenderC; Acks = SenderC; } 接口文件相当于C程序中头文件对函数的声明,接口文件一般放置于提供该接口的模块的同一目录下的interface文件夹中,也可以放在TinyOS根目录下的interface目录中,其命名必须与模块中所提供接口名字相同,注意不是接口的实例化名称或nickname。如下例 interface CC2420Register { async command cc2420_status_t read( uint8_t* data ,uint8_t len); async command cc2420_status_t write( uint8_t *data ,uint8_t len); } 注意:带有参数的接口在interface中申明时不需要写出其接口参数,比如,上例中CC2420Registe接口是带有参数的,而在模块中实现是

文档评论(0)

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

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

1亿VIP精品文档

相关文档