首页 理论教育 基于参数化接口的两个典型例子

基于参数化接口的两个典型例子

时间:2023-06-28 理论教育 版权反馈
【摘要】:对于上层协议来说,需要它们注册自己的AM类型,以便发送和接收该类型的分组。其中,配件ActiveMessageC规范中的接口AMSend、接口Receive和接口Snoop都是参数化接口,这些接口的参数是主动消息的类型。例3.24:配件ActiveMessageC的规范部分另一个使用参数化接口的典型例子是组件HilTimerMilliC,其规范如例3.26。事实上,为了实现配件的参数化接口,需要具有相应参数化接口的模块。例3.26:CC2420无线通信芯片的模块

基于参数化接口的两个典型例子

参数化接口既可以在配件的规范中声明,也可以在模块的规范中声明。

一个典型的使用参数化接口的例子是平台特定的主动消息通信组件ActiveMessageC。

对于分组通信,在基于TCP/IP网络协议的处理过程中,节点接收到协议号(protocol字段)为6的IP分组,认为这是一个TCP分组,会将其提交给TCP协议栈进一步处理。TinyOS中提供的单跳分组通信的主动消息(AM)组件也采用了类似做法,只是没有遵循IANA的标准。

TinyOS中单跳通信协议层(主动消息层,AM层)以上的网络应用或协议具有各自的功能与分组格式,需要AM层能够将收到的分组正确地向上递交对应协议,为此,在AM消息中有一个长度为8比特的类型字段,用于承载上层协议的标识符。对于上层协议来说,需要它们注册自己的AM类型,以便发送和接收该类型的分组。

从实现AM通信的角度来看,AM层上面有多少个协议,就需要AM组件中提供多少个类型为发送或接收接口的实例。更为具体地说,在TinyOS系统中,通常在每个硬件平台的目录中都会有一个名字为ActiveMessageC的配件,这是平台特定的AM通信组件。其中,配件ActiveMessageC规范中的接口AMSend、接口Receive和接口Snoop都是参数化接口,这些接口的参数是主动消息的类型(协议标识符)。

例3.24:配件ActiveMessageC的规范部分(www.xing528.com)

另一个使用参数化接口的典型例子是组件HilTimerMilliC,其规范如例3.26。它是一个平台特定的支持毫秒计时粒度的配件。该配件提供了类型为通用接口Timer<Tmilli>的接口数据TimerMilli[](参数化接口),通过提供256(数组参数是unit8_t)个单独Timer<Tmilli>接口实例,该配件支持多达256个独立计时器。某组件在Timer<TMilli>接口上调用命令startPeriodic(),周期性地通知事件Timer.fired()。正常情况下,应用组件不直接连接HilTimerMilliC。相反,他们使用TimerMilliC,而TimerMilliC提供单一接口。

例3.25:配件HilTimerMilliC的规范部分

上述2个例子都是使用参数化接口的配件,最后这个例子是使用参数化接口的模块。事实上,为了实现配件的参数化接口,需要具有相应参数化接口的模块。下面是针对CC2420无线通信芯片的模块,该模块提供了多个参数化接口,如AMSend和Recive等。

例3.26:CC2420无线通信芯片的模块

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈