nesC编程PPT推荐.ppt
《nesC编程PPT推荐.ppt》由会员分享,可在线阅读,更多相关《nesC编程PPT推荐.ppt(27页珍藏版)》请在冰豆网上搜索。
它们描述一组接口供给者(指令)提供的函数和一组被接口的使用者(事件)实现的函数。
4、组件通过接口彼此静态地相连。
这增加运行时效率,而且允许更好的程序静态分析。
接口(interface),nesC的接口有双向性:
它们描述一个多功能的两组件(供给者和使用者)之间的交互渠道,即描述了两组件的调用关系。
接口可以理解为函数原型的集合。
接口(interface),如何定义接口:
接口放在一个单独的文件中*.nc接口的名称应与文件名对应例如interface1的接口则必须对应于文件名interface1.nc接口定义描述了一系列函数原型(command和event),接口(interface),SendMsg.nc:
interfaceSendMsgcommandresult_tsend(uint16_taddress,uint8_tlength,message_t*msg);
eventresult_tsendDone(message_t*msg,result_tsuccess);
SendMsg接口类型提供者必须实现发送指令,而使用者必须实现sendDone事件.,接口(interface),providesinterfaceA1;
/*提供接口*/usesinterfaceA1;
/*使用接口*/providesinterfaceA1asA2;
/*接口别名*/usesinterfaceA1asA2;
模块(module),模块是接口的实现者和使用者模块包含两部分内容:
模块使用和提供的接口描述模块内部的实现代码模块名也必须与文件名同名,模块(module),例如:
M1.ncmoduleM1/*声明部分*/providesinterfaceA1;
usesinterfaceB1;
implementation/*实现部分,C代码*/commandvoidA1.cmd1()callB1.cmd2();
eventvoidA1.event1().,组件(configuration、component),组件是一个完整的配置列表,组件可以像模块一样使用外部的接口并且对外提供接口。
也可以直译成配置(configuration)组件与模块一样包含两部分内容:
组件使用和提供的接口描述组件内部的实现代码(配置列表)组件名也必须与文件名同名,组件(configuration、component),例如:
C1.ncconfigurationC1providesinterfaceA1;
implementationcomponentsM1;
componentsM2;
A1=M1.A1;
M1.B1M2.B1;
components指令引出需要配置的组件。
组件(configuration、component),配置的方法:
接口调用:
usertoprovider接口实现=:
接口实现指定(相当于),组件(configuration、component),组件(configuration),使用模块,接口1,接口2,接口1,接口2,实现模块,也是组件,接口1,接口2,接口3,命令(command),是在接口中的一种函数,这种函数要求接口的提供者实现,而接口的使用者则会调用这种函数。
形象的称为command,即为接口提供的可供调用的命令。
语法结构类C语言,只是在最前面增加command关键字。
命令(command),command定义:
interfaceA1commandintcmd1(intarg);
命令(command),command实现:
moduleM1providesinterfaceA1;
implementationcommandintA1.cmd1(intarg),命令(command),command使用:
moduleM2usesinterfaceA1;
implementationintret=callA1.cmd1(0x11);
调用command时一定要用call命令,否则编译会出错。
事件(event),也是在接口中的一种函数,这种函数要求接口的提供者调用,而接口的使用者则会实现这种函数。
形象的称为event,即为接口使用者所实现的事件处理函数。
语法结构类C语言,只是在最前面增加event关键字。
事件(event),event定义:
interfaceA1eventvoidevent1(intarg1,intarg2);
可以拥有参数和返回值。
事件(event),event实现:
implementationpostA1.event1(0x1,0x2);
/*发出对应的事件,实际上类同于调用事件处理函数*/接口的提供者在发出事件时,必须使用关键字post,否则编译会出错,事件(event),event使用:
implementationeventvoidA1.event1(intarg1,intarg2)接口使用者必须实现event的具体内容,如同事件处理函数一样。
任务(task),任务是TinyOS系统提供的一种特殊的机制,类同于线程。
task一般为一个函数,无参数,无返回值。
task可以在一般的TinyOS程序中发出,而task的执行是由TinyOS系统内核来实现的。
并且task的执行是不影响调用者的,将会在发出task后的某一个时刻被调度运行,任务(task),task的特点:
无参数、无返回值系统会按特定的顺序调度这些tasktask间不能抢占,但是可以被中断所抢占在task未执行时,发出多少个task,都将只运行一次这个task系统执行完一个task后才会去执行其它task,所以task一般要求短小,不至于影响其它task,任务(task),task的定义:
一般也是放在module中的moduleM1implementationtaskvoidtask1()voidf1()posttask1();