我用的CC2538+zmesh协议栈
我设置协调器工作在many to one模式,CONCENTRATOR_ENABLE设置为true
CONCENTRATOR_DISCOVERY_TIME = 3;
用sniffer抓包发现,协调器只发送link status,不发送route request,是怎么回事
chao sun3:
进一步发现,如果协议栈中定义了
-DNV_INIT-DNV_RESTORE
则协调器不会发送route request,如果没有定义,则会发送route request
我用的Z-Stack Mesh 1.0.0,代码没有任何修改,只是在f8wcoord.cfg中增加如下:
==========================================================================
//保存网络状态-DNV_INIT-DNV_RESTORE
-DCONCENTRATOR_ENABLE=TRUE-DCONCENTRATOR_DISCOVERY_TIME=3
//Link Status 网络维护包,邻居表-DNWK_LINK_STATUS_PERIOD=3
chao sun3:
回复 chao sun3:
又进一步发现,在ZDApp.c的479行:
// At start up, do one MTO route discovery if the device is a concentrator if ( zgConcentratorEnable == TRUE ) { // Start next event osal_start_timerEx( NWK_TaskID, NWK_MTO_RTG_REQ_EVT, 100 ); }
当定义了NV_INIT和NV_RESTORE,执行到479行时zgConcentratorEnable 值为0,怀疑协议栈在恢复NV变量的时候有bug。。
chao sun3:
回复 chao sun3:
原来是IAR的问题,IAR download and debug的时候不擦除flash吗,
VV:
回复 chao sun3:
@chao sun3
CONCENTRATOR_DISCOVERY_TIME = 3的含义,协调器每隔3秒会发一次MTO Router Request,而且是广播数据。
这样的频率太高了,一方面是网络内大量的广播数据,另外是每发一次MTO Router Request会让下面的节点重新选择一次Coordinator的路径,没必要如此频繁的选择到Coordinator的路径。一般建议把改变量设置为120s发一次
-DNWK_LINK_STATUS_PERIOD=3是用来维护邻居之间的链路状况的,一般默认为为15s一次,3s种太短了。