看门狗计时器未运行

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
4个职位/0个新职位
最后一篇文章
pvmellor公司
离线
最后一次见到:1年5个月前
已加入:2017-04-27 20:30
看门狗计时器未运行

我们想使用看门狗定时器作为安全机制。然而,我们似乎无法让它运行。system_init()函数确实启动了它的运行,但是它在一些地方被关闭(冻结),比如periph_init()函数(它直接在寄存器上操作),也在睡眠前的main_func()中。但我们似乎找不到恢复的地方(我希望是通过wdg\u resume())。我想这应该发生在守灵节,但我们找不到。然而,文档暗示它将运行。你能告诉我应该在哪里恢复吗?或者我需要自己在某处添加一个wdg\u resume()(例如在arch\u resume\u from\u sleep()中)?

谢谢,

保罗。

设备:
PM\U对话框
离线
最后一次见到:2天15小时前
工作人员
已加入:2018-02-08 11:03
嗨,梅勒,

嗨,梅勒,

默认情况下,系统唤醒时会重新加载并恢复看门狗计时器。当芯片进入休眠状态时,WDOG将关闭,寄存器将重置为默认值。因此,在唤醒时,将执行BLE\u WAKEUP\u LP\u Handler(),但不需要调用wdg\u resume(),因为它是自动恢复的。是否在da1458x\u config\u basic.h中定义了CFG\u WDOG宏以启用WDOG?另外,是否定义了CFG\u DEVELOPMENT\u DEBUG宏?

谢谢,下午好

pvmellor公司
离线
最后一次见到:1年5个月前
已加入:2017-04-27 20:30
结果是

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

//在延长睡眠或深度睡眠模式下,看门狗定时器被禁用//(power domain PD\ U SYS自动关闭)。尽管如此,如果调试器//已连接,看门狗计时器仍保持启用状态,并且必须显式//禁用。if((GetWord16(SYS_STAT_REG)&DBG_IS_UP)==DBG_IS_UP){wdg_freeze();//停止监视计时器}

此代码似乎在进入睡眠前冻结WDOG,但在进入睡眠后(如果WDOG正在运行)不会解除冻结。所以WDOG保持关闭。我们只是把这一行注释掉了。如果调试器停止CPU的WDOG自动停止无论如何,所以我不知道为什么这个代码是在这里的第一个实例。。。?

回答您的问题:定义了yes CFG\u WDOG,但是没有定义no CFG\u DEVELOPMENT\u DEBUG。我认为后者不会改变WDOG。

不管怎样,上面的这句话被注释掉了,看起来一切正常-谢谢。

保罗。

PM\U对话框
离线
最后一次见到:2天15小时前
工作人员
已加入:2018-02-08 11:03
嗨,梅勒,

嗨,梅勒,

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

谢谢,下午好