TI中文支持网
TI专业的中文技术问题搜集分享网站

zigbee 终端节点切换父节点时心跳任务被关闭?

在一个协调下面加入一个路由开关设备,一个终端开关设备。终端设备加入网络后,当devState=DEV_END_DEVICE后,使用ZDApp_AnnounceNewAddress()发送设备宣称,接着使用osal_start_reload_timer启动一个循环定时任务,定时的向协调器发送固定数据,然后关闭协调器,终端设备的父节点变成路由器,终端将父节点变成路由器设备的过程中,同样的发送设备宣称及重启循环定时器。然后在启动协调器,路由器发送设备宣称,可是此时终端节点的定时被关闭了?,data request正常。此时终端节点的定时器为什么被关闭了?没弄明白,而且我应用层代码中没有关闭定时器的操作。

VV:

心跳任务不可能被关闭的,定时器任务也肯定在走的。

问题应该是节点在断网的时候,即便调用了发送数据的函数,但是在底层仍然会判断节点的状态是不是end device,如果不是的话,就直接放弃数据发送了,目的是要先连接上。

你可以断点调试的方式测试下。

miffy:

回复 VV:

开了个定时器,给协调器发心跳,按理说osal_rand()产生的随机值不可能超过uint16的最大值,也就是0xFFFF(65535),再加上80s,也就不到3分钟,协调器上15分钟检测一下心跳数量,竟然有的心跳还不到2个,奇怪不奇怪,听VV这一说,显然是丢包重发也没重发过去,照这样,有没有可能出现设备之间简单的开关指令都偶尔会出现发不过去的可能?

osal_start_timerEx(zclSampleLight_TaskID, SAMPLELIGHT_HEARTBEAT_TIMEOUT_EVT,osal_rand()+80000);//at least 80s

Mike&Hu:

回复 miffy:

osal_start_timerEx() is a one shot timer function,may be can try use osal_start_reload_timer().

赞(0)
未经允许不得转载:TI中文支持网 » zigbee 终端节点切换父节点时心跳任务被关闭?
分享到: 更多 (0)