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.

[参考译文] CC2652R7:不调试时看门狗不会复位

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1426528/cc2652r7-watchdog-not-resetting-when-not-debugging

器件型号:CC2652R7

工具与软件:

您好!

我们使用的是带有 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

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

    尊敬的 Liam:

    感谢您联系我们。 退一步、此问题是否会在 LaunchPad 上重现? 您是否还可以尝试使用未修改的看门狗示例来查看那里是否也出现行为? 您使用的是哪个 SDK 版本?

    此致、

    1月

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

    您好、Jan:
    感谢您花时间浏览本文档。

    我已经从 SimpleLink  7.41.00.17加载了看门狗示例项目、我能够看到复位被触发、无论是在调试时还是使用 CCS 闪存函数加载程序时。

    我仍然有一个问题、那就是评估板没有复位。 它似乎只是死亡,而不是恢复。 这是否特定于 CC26X2R 系列? 我在数据表中看不到这一点。

    当调试示例项目时、电路板断开连接、但我可以重新连接并且代码恢复执行(在看门狗示例中、LED 再次闪烁)。 这与我在项目中看到的情况不同、在 HaltInBoot 中完成几个调试步骤后、它会显示一个地址并且  "没有定义符号"。
     
    我比较了 cmd 文件、唯一的区别是 在示例项目中设置的"--entry_point ResetISR"、而不是我的。 添加此行未改变该行为。

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

    虽然我的初始测试没有显示器件复位、但我想我看到了错误的指标(电流消耗、没有改变)。 我设法使用 LED 来显示我是从 init 引导、而不是继续执行代码、这使得功能验证更容易。

    示例项目和我的项目之间唯一明显的区别,似乎修复了我的问题不重置是在 cmd 链接器命令文件:
    --entry_point ResetISR

    and

    --args 0x8

    我们之所以会讨论调试模式下的看门狗行为不同于闪存时的看门狗问题、是因为48MHz 时钟(因此、根据此结果得出的看门狗时钟)在睡眠/低功耗模式下会暂停。 当连接调试器时、它会保持该时钟运行以访问某些功能、因此在低功耗模式下调试时、看门狗超时。