大家好、我的看门狗遇到了一些问题。
我将按如下方式初始化看门狗:
void _wL_watchdog_timer_init (void)
{
//首先初始化 WDT 接口
Watchdog_init();
memset (&WDT_Enable_Flag、false、sizeof (WDT_Enable_Flag));
Watchdog_Params WDT_params;
Watchdog_handle;
uint32_t 节拍= 0;
INT 状态= 0;
//初始化看门狗计时器参数初始化
Watchdog_Params_init (&WDT_params);
WDT_params.resetMode = Watchdog_reset_on;
wdt_params.callbackFxn =(Watchdog_Callback)_WL_WDT_ISR_Handler;
wdt_params.debugStallMode = Watchdog_debug_star_on;
WatchdogHandle = Watchdog_open (Board_WATCHDOG0、&WDT_params);
if (watchdogHandle == NULL){
log_out ("无法打开看门狗手柄\n\r\n);
InfinateLoop (__file__、__func__、__line__);
while (1);
}
//将毫秒转换为刻度
ticks = Watchdog_convertMsToTicks (watchdogHandle、millisecs_period);
STATUS = Watchdog_setReload (看门狗手柄、节拍数);
if (Status ==Watchdog_STATUS_UNSUPPORTED)
{
Log_out ("\n 无法设置重新加载值\n");
}
}
WDT 中断处理程序:
void _WL_WDT_ISR_Handler (Watchdog_Handle WDT_Handle)
{
if (WDT_Enable_FLAG。WDT_Network_Thread ||(Network_Disconnect >= 1)||
WDT_Enable_FLAG。WDT_Factory_Reset_Thread || WDT_Enable_FLAG。WDT_ADC_Thread ||
WDT_Enable_FLAG。WDT_MQTT_Thread || WDT_Enable_FLAG。WDT_RTC_Thread
|| WDT_Enable_FLAG。WDT_Temperature_Thread)
{
//log_out ("\n 在 WDT ISR 处理程序内\n");
LED_ON_OFF (LED_NUMBER_6、LED_STATUS_OFF);
LED_ON_OFF (LED_NUMBER_7、LED_STATUS_OFF);
//log_out ("WDT_Enable_FLAG。WDT_Network_Thread =%d\r\n"、WDT_Enable_FLAG。WDT_Network_Thread);
//log_out ("WDT_Enable_FLAG。WDT_Factory_Reset_Thread =%d\r\n"、WDT_Enable_Flag.WDT_Factory_Reset_Thread);
//log_out ("WDT_Enable_FLAG。WDT_ADC_Thread =%d\r\n"、WDT_Enable_FLAG。WDT_ADC_Thread);
//log_out ("WDT_Enable_FLAG。WDT_MQTT_Thread =%d\r\n"、WDT_Enable_FLAG。WDT_MQTT_Thread);
//log_out ("WDT_Enable_FLAG。WDT_RTC_Thread =%d\r\n"、WDT_Enable_FLAG。WDT_RTC_Thread);
//log_out ("WDT_Enable_FLAG。WDT_MODBUS_Thread =%d\r\n"、WDT_Enable_FLAG。WDT_MODBUS_Thread);
//log_out ("WDT_Enable_FLAG。WDT_Temperature_Thread =%d\r\n"、WDT_Enable_FLAG。WDT_Temperature_Thread);
Network_Disconnect 计数= 0;
返回;
}
Watchdog_clear (WDT_Handle);
WDT_Enable_FLAG。WDT_Network_Thread = true;
//WDT_Enable_FLAG。WDT_Factory_Reset_Thread = true;
WDT_Enable_FLAG。WDT_ADC_Thread = true;
WDT_Enable_FLAG。WDT_MQTT_Thread = true;
WDT_Enable_FLAG。WDT_RTC_Thread = true;
WDT_Enable_FLAG。WDT_MODBUS_Thread = true;
WDT_Enable_FLAG。WDT_Temperature_Thread = true;
}
我正在运行5-6个线程、如果其中一个线程无法执行并进入无限循环、我设置了30秒的 WDT 超时、它执行正常、 有时 、在中断处理程序复位中输入 IF 条件后不会触发、并且我也无法在其他线程中获取任何日志。
1.如果 WDT 未被清零、它应该复位、但没有发生这种情况、有人知道原因吗?
2.在 没有 WDT 复位的情况下返回的情况下,我是否需要处理这里的任何其他情况?
此致、
Chiranth H D.