This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2652RB:周期性计时器复位不成功

Guru**** 1805500 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1399213/cc2652rb-periodic-timer-reset-unsuccessfull

器件型号:CC2652RB

工具与软件:

你好。 我有 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 查看、我看不到任何看起来有用的函数。

如何复位计时器以便仅在电路板断开连接时触发?