看门狗定时器没有运行

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support。我们将在未来几天修复bug /优化搜索和标记。
4个职位/ 0个新
最后发表
pvmellor
离线
最后看到:1年7个月前
加入:2017-04-27 20:30
看门狗定时器没有运行

我们想用看门狗定时器作为安全机制。然而,我们似乎不能让它运行。system_init()函数确实启动了它的运行,但随后它在几个地方被关闭(冻结),比如外围init()函数(它直接操作寄存器),以及main_func()在睡眠之前。但是我们似乎不能在任何地方找到它被恢复(通过wdg_resume()我希望)。我猜这应该是在醒着的时候发生的,但我们找不到。然而,文档暗示它将运行。你能告诉我应该在哪里恢复吗?或者我需要自己在某处添加一个wdg_resume()(例如在arch_resume_from_sleep())?

谢谢,

保罗。

设备:
PM_Dialog
离线
最后看到:9小时26分钟前
工作人员
加入:2018-02-08 11:03
嗨pvmellor,

嗨pvmellor,

缺省情况下,看门狗定时器会在系统唤醒时重新加载并恢复。当芯片进入休眠状态时,WDOG将关闭,寄存器将重置为默认值。因此,在唤醒时,将执行BLE_WAKEUP_LP_Handler(),但不需要调用wdg_resume(),因为它会自动恢复。你有定义在da1458x_config_basic.h中的CFG_WDOG宏来启用WDOG吗?另外,是否定义了CFG_DEVELOPMENT_DEBUG宏?

谢谢,PM_Dialog

pvmellor
离线
最后看到:1年7个月前
加入:2017-04-27 20:30
结果是

原来是arch_main.c中的以下代码,main_func(void)

//在延长睡眠和深度睡眠模式下,看门狗定时器关闭// (power domain PD_SYS is automatic OFF)。虽然,如果调试器//是附加的看门狗定时器仍然是启用的,并且必须显式地//禁用。if (GetWord16(SYS_STAT_REG) & DBG_IS_UP) == DBG_IS_UP) {wdg_freeze();//停止看门狗定时器}

这段代码似乎在进入睡眠之前冻结了WDOG,但在进入睡眠之后没有解冻它(如果它一直在运行)。所以WDOG不参与。我们只是把这一行注释掉了。如果调试器停止CPU, WDOG自动停止,所以我不确定我理解为什么这段代码在这里的第一个实例…?

无论如何回答您的问题:是的,定义了CFG_WDOG,但是没有定义CFG_DEVELOPMENT_DEBUG。我假设后者不会改变WDOG。

不管怎样,上面的这行注释掉了,一切看起来都很好-谢谢。

保罗。

PM_Dialog
离线
最后看到:9小时26分钟前
工作人员
加入:2018-02-08 11:03
嗨pvmellor,

嗨pvmellor,

如果定义了CFG_DEVELOPMENT_DEBUG,则启用调试模式,并在Hardfault和NMI (Watcdog)句句中的断点中设置代码执行。因此,它允许开发人员热连接调试器并获得调试信息。我建议您定义这个宏。

谢谢,PM_Dialog