嗨对话框
我使用ftreertos_rtt来测试看门狗函数,但在看门狗超时时似乎没有重置。我将dg_configuse_wdog定义为1并注册了看门狗,但没有任何sys_watchdog_notify(wdog_id);以下是我的测试代码
// ----------------------------------------- //
静态void prvtemplatetask(void *pvparameters)
{
OS_TICK_TIME XNEXTWAKETIME;
静态UINT32_T test_counter = 0;
int8_t wdog_id;
XnextWakEtime = OS_GET_TICK_COUNT();
wdog_id = sys_watchdog_register(false);//仅注册看门狗,没有任何看门狗
为了( ;; )
{
.........................................................
}
// ----------------------------------------------------------------------------------------------------------------- //
当重置电源时,我添加了GPIO高/低信号,但是我只有一次没有由WhatchDog超时重置引起的重复信号。
我该怎么做才能重置看门狗(例如RESET上的电源)?
此外,我想将最大看门狗超时从2.6s扩展到5秒,是否可以这样做?
感谢您的帮助
设备:
嗨,尼古兰,
默认情况下,代码将在开发模式下以无尽的循环(而(1))堆叠。因此,当看门狗到期时,您应该用自己的处理程序绕过默认的NMI处理程序。请检查关注代码段。
#include“ sys_watchdog.h”
#include“ hw_watchdog.h”
void watcdog_cb(unsigned long *exception_args)
{
printf(“ exit看门狗\ n \ r”);
}
静态void prvtemplatetask(void *pvparameters)
{
int8_t wdog_id __attribute __((未使用));
sys_watchdog_init();
wdog_id = sys_watchdog_register(false);
/*用自己的一个绕过默认的NMI处理程序!*/
hw_watchdog_register_int(watcdog_cb);
printf(“输入看门狗\ n \ r”);
为了 (;;) {
}
}
谢谢,pm_dialog
嗨对话框
我在DSPS项目代码的System_init()中读取了下面的设置。我不明白“闲置守望狗”的目的是什么?
如果我在不使用“闲置守望狗”的情况下启用看门狗,则系统似乎不起作用。感谢您的回答
#如果DG_Configuse_wdog
//首先注册空闲任务。
idle_task_wdog_id = sys_watchdog_register(false);
assert_warning(idle_task_wdog_id!= -1);
sys_watchdog_configure_idle_id(idle_task_wdog_id);
#万一
嗨,尼古兰,
如果您不使用IDLE任务WDOG,则应在vapplicationalidlehook()函数中注释SYS_WATCHDOG_NOTIFY(IDLE_TASK_WDOG_ID)。否则,IDLE_TASK_WDOG_ID将不确定,WDOG将从未知值中通知,并且将击中硬故障。我们使用它,以便从空闲任务中通知WDOG。
谢谢,pm_dialog
你好
如果您在看门狗代码中看起来更深,还有两件事可以防止发生
-JTAG探测使用情况
- #define DG_Configimage_setup Development_mode vs Production_mode
两个调试都在看门狗的NMI处理程序中进行管理,并通过断点替换重置,因此调试工具可用于分析看门狗的原因(使用硬件异常方法)。