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

在应用层判断节点状态变化,同一个状态变化,应用层接收到两次

else if( zclSample_NwkState == DEV_END_DEVICE ){
 HalUARTWrite(HAL_UART_PORT_0, "DEV_END_DEVICE", 14);
}
else if( zclSample_NwkState == DEV_NWK_DISC )
{
 HalUARTWrite(HAL_UART_PORT_0, "DEV_NWK_DISC", 12);
}

如上面代码,节点状态发生变化,在这里会调用两次,是什么原因?

例如DEV_NWK_DISC节点处于此状态时,应用层会接收到两次。节点状态为DEV_END_DEVICE或者DEV_NWK_ORPHAN都是同样的问题。

Alvin Chen:

请使用TI的原始例程试一下,没遇到过。

user4796768:

回复 Alvin Chen:

你好 Alvin Chen!
按照你说的,我使用了新的协议栈,Z-Stack Home 1.2.2a.44539,使用的是doorlock的例程,修改了串口的MT_UART_DEFAULT_BAUDRATE和MT_UART_DEFAULT_OVERFLOW,然后在应用层做了简单修改,如下:case ZDO_STATE_CHANGE:zclSampleDoorLock_NwkState = (devStates_t)(MSGpkt->hdr.status);
// now on the networkif ( (zclSampleDoorLock_NwkState == DEV_ZB_COORD) ||(zclSampleDoorLock_NwkState == DEV_ROUTER) ){}else if( zclSampleDoorLock_NwkState == DEV_END_DEVICE ){
#ifndef HOLD_AUTO_STARTgiDoorLockScreenMode = DOORLOCK_MAINMODE;zclSampleDoorLock_LcdDisplayUpdate();
#endifHalUARTWrite(HAL_UART_PORT_0, "hello world!", 12);
#ifdef ZCL_EZMODEzcl_EZModeAction( EZMODE_ACTION_NETWORK_STARTED, NULL );
#endif}break;
其中的HOLD_AUTO_START和ZCL_EZMODE在预编译中都设置为x。
结果串口调试工具显示
[2019-06-13 14:59:50.963]# RECV HEX>
FE 06 41 80 01 02 00 02 06 03 C3– 这里是MT层输出的 不用管

[2019-06-13 14:59:54.037]# RECV HEX>
68 65 6C 6C 6F 20 77 6F 72 6C 64 21 68 65 6C 6C 6F 20 77 6F 72 6C 64 21

[2019-06-13 15:00:09.715]# RECV ASCII>
?A€ ?– 这里是MT层输出的 不用管

[2019-06-13 15:00:12.781]# RECV ASCII>
hello world!hello world!

Alvin Chen:

回复 user4796768:

建议你去debug,不知道你这个是串口造成。

赞(0)
未经允许不得转载:TI中文支持网 » 在应用层判断节点状态变化,同一个状态变化,应用层接收到两次
分享到: 更多 (0)