如何重置集中器的某个源路由项
Hello world,
我在100个节点的源路由测试中,发现某个源路由项出现错误, rtgSrcTable[MAX_RTG_SRC_ENTRIES]中,我想要重置这个出现问题的表项,但不知道官方有什么API可以操作?
UP
没有这样的API
最多手动初始化
rtgSrcTable[idx].dstAddress = INVALID_NODE_ADDR;
rtgSrcTable[idx].relayCount = 0;
rtgSrcTable[idx].relayList = NULL;
rtgSrcTable[idx].expiryTime = 0;
谢谢VV,这个方式还是有效果的。
另外想请问下ZDO_ManytoOneFailureIndicationCB有发起MTO请求,2.5.1版本协议栈升级后每次MTO失败回调就发送MTO请求,这样是否会太频繁?
实际100个节点测试中经常收到这个失败的回调,因此我担心MTO请求过于频繁,会加重网络负担。
挂机了一下午,发现现在没有可用内存了,AF发数据,AF_DATA_CONFIRM_CMD返回0x1A(MAC_NO_RESOURCES),以及有的直接返回0x10(afStatus_MEM_FAIL)。
怀疑是不是relayList这边内存没释放,想问下这个链表指针是动态申请的吗?我用osal_mem_free(rtgSrcTable[i].relayList);一调用就出问题。
relayList直接赋值NULL,会不会有问题?
不会一直发送,在收到MTO failure以后,会调用MTO req , 在这个函数里面有做逻辑的。你可以测试下!
在释放前做下判断
if ( rtgSrcTable[i].relayList )
{
osal_mem_free( rtgSrcTable[i].relayList );
rtgSrcTable[i].relayList = NULL;
}
谢谢VV,关于relaylist的指针确实是我大意了,对于全局指针在释放后没有置为NULL,现在已经改正。
关于MTO REQ还想确认下,比如100ms以内收到两次MTO failure,是否会发两次MTO req?
应该是1000ms
你可以改下下面这个参数
// The time limited to one MTO RReq (Concentrator Announce) in milliseconds.
CONST uint16 gMTO_RREQ_LIMIT_TIME = MTO_RREQ_LIMIT_TIME;
多谢VV,这下全理顺啦^_^