工具与软件:
你好。 我有 Zigbee 温度传感器终端设备、一直遇到过通信问题、我认为这些问题可以通过电路板复位来解决。
问题:实验板会随机断开与 协调器的连接、但仍然处于通电状态、并且无法发送任何数据。
我尝试修复此问题:如果电路板断开连接、应该也不会有消息到达 Zigbee 堆栈。 因此、我可以使用一个计时器来触发电路板复位、并希望在再次启动后、连接将恢复、各项工作将再次正常。
但是、我似乎无法正确复位计时器、而且计时器会不断触发。
我在 zclSampleTemperatureSensor_initializeClocks 内创建了一个周期为5分钟(以毫秒为单位) 的 UtilTimer。
communicationClkHandle = UtilTimer_construct( &communicationClkStruct, communicationTimeoutCallback, communicationResetDuration, communicationResetDuration, true, 0);
我希望将我收到的每个堆栈消息复位、因此绝不会触发回调(此时仅点亮 LED、因此没有任何有趣的事情)。 我 为此选择了 zclSampleTemperatureSensor_processZStackMsgs、并尝试了几种方法来实现计时器复位。
static void zclSampleTemperatureSensor_processZStackMsgs( zstackmsg_genericReq_t *pMsg) { UtilTimer_setTimeout(&communicationClkHandle, communicationResetDuration); // does not do anything, callback triggers constantly switch (pMsg->hdr.event) ... }
static void zclSampleTemperatureSensor_processZStackMsgs( zstackmsg_genericReq_t *pMsg) { UtilTimer_stop(&communicationClkStruct); UtilTimer_start(&communicationClkStruct); // same behaviour switch (pMsg->hdr.event) ... }
通过 util_timer.h 查看、我看不到任何看起来有用的函数。
如何复位计时器以便仅在电路板断开连接时触发?