大家好、我正在努力跟踪产品中的间歇性重启情况。 我们的产品使用 CC2652R、并使用 SimpleLink 4.20.1.0版中的 Zigbee 堆栈。 我们的应用相当大、不幸的是、我无法真正提供重现我所看到问题的极少代码示例。 但我可以告诉您、我认为这些函数调用会导致重新启动。
我们看到重新启动的情况是在尝试更改器件上的 Zigbee 通道时发生的。 我们的系统通过 Zigbee 执行各种操作来响应传入的命令。 我已经能够将我们的命令处理程序向下放置到最低限度的代码、从而重现我们看到的问题。 我的测试脚本会循环发送两条 Zigbee 命令。
第一个命令处理程序仅将接收到的 Zigbee 通道掩码保存到 NV 存储、并告知栈在下次引导时通过调用以下代码行复位网络设置:
zclport_writeNV (NV_USER_CHANNEL、0、sizeof (mask)、&mask);
ZgWriteStartupOptions (ZG_STARTUP_SET、ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
第二个命令处理程序只需调用以下代码行来重新启动器件:
SysCtrlSystemReset();
当器件引导备份时、它会从 NV 存储读取保存的 Zigbee 通道掩码并通过调用 Zstackapi_sysConfigWriteREQ ()来初始化栈。
正如我说过的、测试脚本只循环向下发送这两条 Zigbee 命令、每次迭代都会传递一个新通道。 我通常可以运行此循环几十次而不出现任何情况、但间歇性地、当发送第一条命令时器件会重新启动。 (是的, 第二个命令仍然会重新启动设备,但请记住,这是重现问题的最小示例。 在我们的实际应用中、 这两条命令之间需要执行其他操作。)
请注意、我正在使用 SimpleLink 中的看门狗 API、因此系统重启很可能是看门狗复位、因为有些事情是挂起的。 我有一个相当长的看门狗超时、即45秒、所以我怀疑这只是某个命令需要太长的时间才能完成的情况。
这个问题的有趣部分是,如果我从我们的测试套件中取出第二个命令,即,我们只是循环调用 zclport_writeNV()和 zgWriteStartupOptions()的命令 ,那么我无法重现问题。 因此,如果我调用 zclport_writeNV()和 zgWriteStartupOptions()并调用 SysCtrlSystemReset(),它似乎只是清单。
zclport_writeNV()或 zgWriteStartupOptions()是否存在可能导致重新启动或挂起的任何已知问题? 从我可以说,zgWriteStartupOptions()也基本上可以归结为 nV 写。 特别是,是否有任何可能也涉及 SysCtrlSystemReset()的内容?
提前感谢、
格兰特中国
华泰克株式会社