标题的问题,也可以理解为,如何提高ember zigbee设备大规模组网的处理能力。
尽可能的调用emberTick函数,可以让协议栈保持良好时序,并和802.15.4 MAC兼容。至少,在每个while的周期内,应该调用该函数一次
如果当网络信息非常繁重的时候,尤其在接受端,该函数应该更多的被调用。理想情况是,当收到一个packet时,你应该在500ms内调用该函数,这样,就可以有大量的时间来进行ACK的回复,以避免发送端没有收到ACK,并达到传输时间上限(1.28s). 在最坏的情况下,只要你的接受消息队列没有溢出,就应该调用这个足够多次,更多的packet缓冲意味着在溢出前调用emberTick函数更多的灵活性。如果不能达到理想的情况,就意味着更多的信息retry,这样就会导致更多的交通堵塞以及更高概率的丢失信息。如果不能达到最差的情况,意味着你会丢失接受消息,有可能丢失所有的协议栈buffer。
需要牢记的是,调用emberTick次数较多时,也只有很少的影响,因为协议栈如果没在pending状态,协议栈会立即返回而不影响其他程序执行。当然,如果调用太频繁了,则会导致丢失信息,以及buffer的不足,也会增加路由包的发送延迟。
补充的个人观点:
对于ZED设备来说,每个while循环调用一次emberTick,一般足够。但是对于ZC设备,根据在大规模组网的实际测试情况来看,retry现象会很明显,甚至导致信息发送不正确。此时,多次调用emberTick将会是一个很不错的选择。
zigbee | Ember | 调用emberTick()的频率
原文地址:http://blog.csdn.net/u013797574/article/details/48086473