Hi i am facing some issues with my watchdog.
i am initializing watchdog as follows:
void _WL_WATCHDOG_TIMER_INIT(void)
{
//Initialize the WDT interface first
Watchdog_init();
memset(&WDT_Enable_Flag, false, sizeof(WDT_Enable_Flag));
Watchdog_Params wdt_params;
Watchdog_Handle watchdogHandle;
uint32_t Ticks = 0;
int Status = 0;
//initialize the Watchdog timer params init
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_STALL_ON;
watchdogHandle = Watchdog_open(Board_WATCHDOG0, &wdt_params);
if(watchdogHandle == NULL) {
LOG_OUT("unable to open watchdog handle\n\r");
InfinateLoop(__FILE__, __func__, __LINE__);
while(1);
}
//convert milliseconds to ticks
Ticks = Watchdog_convertMsToTicks(watchdogHandle, MILLISECONDS_PERIOD);
Status = Watchdog_setReload(watchdogHandle, Ticks);
if(Status == Watchdog_STATUS_UNSUPPORTED)
{
LOG_OUT("\nUnable to set reload value\n\r");
}
}
The WDT Interrupt Handler:
void _WL_WDT_ISR_Handler(Watchdog_Handle wdt_handle)
{
if(WDT_Enable_Flag.WDT_Network_Thread || (Network_Disconnect_Count >= 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 inside the WDT ISR Handler\n\r");
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_Count = 0;
return ;
}
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;
}
I am Running 5-6 threads and if one of the thread fails to execute and enters infinite loop i have set 30 Sec of WDT Timeout it is executing fine, sometimes after entering the IF condition in interrupt handler reset is not triggered and i am not able to get any log in other thread also.
1. if the WDT is not cleared it should reset but that is not happening, does anyone know the reason for this?
2. in IF condition i am returning without WDT reset, do i have to take care of any other condition here?
Regards,
Chiranth H D.