工具与软件:
您好!
我们使用的是带有 CC2652R7的定制电路板。 我们的应用基于 ble5stack simple_peripheral_oad_on_chip tirtos7示例、使用了蓝牙、OAD 和 TI-RTOS。
我们注意到看门狗出现了奇怪的行为;
主要问题是不会重置我们的器件。 我们希望代码从 main.c 开始执行、但代码似乎只是挂起的、而且永远不会重新激活。
第二个问题是、我们只能在插入调试器时让看门狗触发尝试的复位。 如果没有调试器、我们的电路板将在看门狗超时后继续正常工作、即使没有任何 WATCHDOG_CLEAR 调用也是如此。
更多详细信息:
我们的应用在进入休眠状态之前保持唤醒状态 x 秒。 当它处于清醒状态时,我们用 watchdog_clear ()踢 WD。 我们能够通过消除踢脚动作使 WD 触发。 但它不会按我们的预期重置器件、它只是挂起(当我们重新连接时、调试器会显示"no symbols are defined"、就像 这篇帖子一样)。
看门狗参数: // initialise the watchdog
Watchdog_init();
Watchdog_Params_init(&m_hal_stateWatchdogParams);
m_hal_stateWatchdogParams.resetMode = Watchdog_RESET_ON;
m_hal_stateWatchdogParams.callbackFxn = (Watchdog_Callback)hal_stateWatchdogCallback;
m_hal_stateWatchdogParams.debugStallMode = Watchdog_DEBUG_STALL_ON;
第二期更详细信息:
我们有看门狗回调函数。 在该函数内、我们将递增一个8位计数器。 然后、我们比较以查看计数器是否大于20。 如果该值不大于20、则清除看门狗并等待下一次回调。 如果该值>20、则我们希望触发看门狗复位、因此我们不执行任何操作、看门狗应为我们处理其余操作。
我们在这里看到的问题是这种情况;当使用调试器进行单步执行时、计数器达到20、然后下一次回调评估板失去连接(太棒了、看门狗已经工作)。 但:如果我们继续运行、让我们在没有断点的情况下运行、则我们可以偶尔跳转并查看计数器的值。 它达到20、然后在再次递增计数之前复位回0! 这就像看门狗复位重新初始化计数器变量、但实际上不会导致复位。
您是否有任何想法可以帮助我们取得进步、或我们尚未掌握的知识?
谢谢!
Liam