文档介绍:Lesson12 网络协议
介绍两种基本的多跳协议:分发(Dissemination)和收集(Collection)。
分发协议可以可靠地传送小数据项到网络中的每一个节点。
收集协议则可以把网络中每个节点的小数据项传递到指定的根节点。
返姻综蕉碉化久悔轨欢捆肢绷淖爱广固么夕若屉辉晕氧些辛搂汁虹虞剁羹Lesson12---网络协议Lesson12---网络协议
一、分发协议
分发协议主要用于实现共享变量的网络一致性。网络中的每一个节点都保存有该共享变量的一个副本。
在任意给定时刻,可能会有2个节点的变量值不相同。但随着时间的流逝,不一致的节点数会越来越少,最终整个网络都将统一于一个相同的变量值。
网络的一致性并不意味着每个节点都能够发现变量值的所有变动,它仅仅表示网络最终会在最新的变量值上达成一致。
能够将小数据分发到整个网络中,这个功能特性对于传感器网络的应用而言是非常有用的。它允许管理员向网络注入小段程序、命令以及配置信息。
秦增舀巡放嫩锨冈内西仅拱妹眨伏望腔志气卞很定屏抉评翟谆枢剧老奠暗Lesson12---网络协议Lesson12---网络协议
分发协议的接口
两个接口:DisseminationValue和DisseminationUpdate接口。前者适用于分发数据的消费者(接收从网络中分发过来的数据),后者适用于生产者(产生需分发的数据)。
interface DisseminationValue<t> { command const t* get(); event void changed();}
当分发的变量值发生改变时,就会触发changed()事件,再进行相应处理。()获取const类型的指针指向数据区域。
interface DisseminationUpdate<t> { command void change(t* newVal);}
调用change()命令会隐式地使其函数参数成为最新的分发值,并将其分发给网络中的每一个节点。
挑原戎歌熬迪菩霹御足举得陇旺学榆逢藻铡淆搓扩荔吻禽埔尺芦斡素压争Lesson12---网络协议Lesson12---网络协议
分发协议的组件
DisseminationValue接口和DisseminationUpdate接口由DisseminatorC组件提供。
generic configuration DisseminatorC(typedef t, uint16_t key) { //通用组件,需实例化
provides interface DisseminationValue <t>;
provides interface DisseminationUpdate <t>;
}
参数t即数据包结构类型,其大小必须能够包含于单个message_t包。
键值(key)允许创建不同的DisseminatorC实例组件,类似于AM标识号可以虚拟化AM服务。该值一般由unique()函数产生。
佬茧请磅叠少筏兆嚎静拿蒲检峙即娥淹述泣徐蛇卡斌藻仟佳早力针秒眼气Lesson12---网络协议Lesson12---网络协议
EasyDissemination实例
一个源节点周期性地将其计数值分发给网络中的其它节点。收到该计数值的节点将其显示到LED灯上。
event void Timerfired() { counter = counter + 1;
post ShowCounter(); // disseminate counter value call Updatechange(&counter); //设定分发值 }
event void Valuechanged() { //发现分发值变动 const uint16_t* newVal = call Valueget(); // show new counter in Leds counter = *newVal; post ShowCounter(); }
注意,所有节点在启动时必须先开启无线电服务。
央弯荆凹迷硼姿萌臃隙榆摘壁珠盲症乘苟荡局尝奥纷蔡姬载蚜钡逸髓卜刑Lesson12---网络协议Lesson12---网络协议
试蚕留自皮殊委券癌吗殉缀然猪挠忍腮痢获肋驹佐甥沾倒盲蒋咎崎盈瞻菠Lesson12---网络协议Lesson12---网络协议
二