大家好!
环境如下:
1 个 ZR, 4个ZED, 1个ZC
4个ZED 连接===》 ZR 然后 连接====》ZC
ZR 应用层上 做了一个定时器,每8秒 发一下 ACTIVE EP 请求, 检测ZR 与ZC 的连接情况
if(events & NETLINK_CHECK_EVT){if(Being_Link == FALSE){#ifdef LEDShowHalLedSet ( HAL_LED_2, HAL_LED_MODE_OFF);if(!BasicReset)HalLedBlink ( HAL_LED_1, 0,LOST_NETWROK_FLASH, LOST_NETWROK_CYCLE );#endif}else{#ifdef LEDShowHalLedSet ( HAL_LED_1 | HAL_LED_2, HAL_LED_MODE_OFF);#endif}if(FailedLinkCnt >= LoseLinkCnt_Limit){Being_Link = FALSE;FailedLinkCnt =0;}else{FailedLinkCnt++;}ZDP_ActiveEPReq(&Coordinator_dstAddr,Coordinator_dstAddr.addr.shortAddr,0);osal_start_timerEx( zclVrouter_TaskID, NETLINK_CHECK_EVT, NETLINK_CHECK_CYCLE);//8secondreturn ( events ^ NETLINK_CHECK_EVT );}
整个环境允许了30~40 分钟左右, 然后发现ZR 连接状态的指示灯一直闪。。。
抓包软件,显示ZR 没有再发ACTIVE EP request、、、、、
然后挂在 ZR 下面的ZED 发送给ZC 的消息, ZR 接到了但是没有帮它们 转发~~~~~~全吞了!!!!
但是,我查看了一些ZC 的信号还是很好, 但是ZR 就是没有把信息转发给ZC。。。。。
抓包的log 如下:
VV:
有点怀疑是ZR上面的memory 溢出了。因为Active EP request发送和Response会占用较多的memory 分配。
你是哪个版本的协议栈?
你可以使用memory 调试的方法,把下面改成TRUE,然后用IAR调试模式下运行,去检查memory里面的情况。
// For information about memory profiling, refer to SWRA204 "Heap Memory Management", section 1.5.#if !defined OSALMEM_PROFILER#define OSALMEM_PROFILER FALSE // Enable/disable the memory usage profiling buckets.#endif
另外你可以用其他的数据包做心跳包,测试下。或者直接把这个心跳包关了。
另外你自己的应用程序里面是否有memory 动态分配,但是没有释放的?
MarS:
回复 VV:
VV, 确实ZR 上的内存泄漏了! 后来我已经查到了。
另外有两个 问题想请教你:
1. ZC 广播 的信息 是否会 通过 ZR 广播到 ZR 的下级节点?
2. ZR 下级节点是 休眠设备, 那么 ZR 能为下级节点 缓存 多少条 广播信息?
3 如果ZC 断电了, 此时ZR 下级 的ZED 如果发送消息 到ZC , ZR 是否会为 ZED 缓存消息? 还是 直接发出去???
“另外你可以用其他的数据包做心跳包”
你的意思 是自定义 一个私有的吗? 在现有基础上 (不改动ZC 端程序) , 有没有其他更好的 数据包?
谢谢!
VV:
回复 MarS:
MarS
VV, 确实ZR 上的内存泄漏了! 后来我已经查到了。
另外有两个 问题想请教你:
1. ZC 广播 的信息 是否会 通过 ZR 广播到 ZR 的下级节点?
取决于使用的广播地址
// 0xFFFC: Routers and Coordinators // 0xFFFD: Everyone with RxOnWhenIdle == TRUE // 0xFFFE: Reserved (legacy: used for 'invalid address') All device// = 0xFFFF2. ZR 下级节点是 休眠设备, 那么 ZR 能为下级节点 缓存 多少条 广播信息?
每个设备最多3条,最多12条
3 如果ZC 断电了, 此时ZR 下级 的ZED 如果发送消息 到ZC , ZR 是否会为 ZED 缓存消息? 还是 直接发出去???
直接发出去了,路由的目的为了转发
“另外你可以用其他的数据包做心跳包”
比方说IEEE Request之类的
你的意思 是自定义 一个私有的吗? 在现有基础上 (不改动ZC 端程序) , 有没有其他更好的 数据包?
谢谢!