AsyncTcp Library: TaskWatchdog ausschalten bad practice?

Hallo,

folgendes Problem:

Ich Habe eine Funktion, die SmartConfig startet.

     void StartSmartConfig(){
	unsigned long wifiCancelTime;
	Log.notice("Waiting %i secs for SmartConfig packet from mobile...." CR, _smarCfgTimeout);
	
	WiFi.mode(WIFI_STA);
	bool smartConfigBeginResult =  WiFi.beginSmartConfig();

	Log.notice("SmartConfig started, result: %T" CR,smartConfigBeginResult);

	wifiCancelTime = (*_smartCfgTimeout) * 1000 + millis();
	while (!WiFi.smartConfigDone() && (millis() < wifiCancelTime))
	{
		delay(500);
	}
	if (WiFi.smartConfigDone())
	{
		Log.notice("SmartConfig packet from mobile received...." CR);
		while (WiFi.status() != WL_CONNECTED && (millis() < wifiCancelTime))
		{
			delay(200);
		}
	}
	else
	{
		Log.error("SmartConfig packet from mobile failed...." CR);
	}
     }

Auf der App, die den GC Code sendet läuft ja ein UDP Server, der auf Antwort wartet und ein UDP Client, der die über die länger verschlüsselten WiFi Daten ins WiFi broadcastet.
Nachdem der ESP32 den GC Code erhalten hat, sollte er ja der App mitteilen, dass er fertig ist und seine IP Adresse übermitteln. Das passiert leider nicht stabil (ca. 6 von 10 Mal). Es ist wichtig, dass die App die IP Adresse des ESP32 bekommt, denn danach sollen noch einige REST Aufrufe erfolgen.
Nun habe ich diese Smartconfig Funktion in einen Task ausgelagert mit Priorität 20.
Damit funktioniert es, nachdem SmartConfig fertig ist, soll der Webserver starten für die REST Aufrufe ,nur habe ich leider kommt danach ein weiterer Fehler:

task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
task_wdt: - async_tcp (CPU 0/1)

Nun habe ich mir die Dokumentation vom TaskWatchdog und die AsyncTcp Library mal genauer angesehen.

Espressif TWDT Doku

In der AsyncTcp Library wird ein Task gestartet:

xTaskCreateUniversal(_async_service_task, "async_tcp", 8192 * 2, NULL, 3, &_async_service_task_handle, CONFIG_ASYNC_TCP_RUNNING_CORE);
static void _async_service_task(void *pvParameters){
    lwip_event_packet_t * packet = NULL;
    for (;;) {
        if(_get_async_event(&packet)){
#if CONFIG_ASYNC_TCP_USE_WDT
            if(esp_task_wdt_add(NULL) != ESP_OK){
                log_e("Failed to add async task to WDT");
            }            
#endif
            _handle_async_event(packet);
#if CONFIG_ASYNC_TCP_USE_WDT
            if(esp_task_wdt_delete(NULL) != ESP_OK){
                log_e("Failed to remove loop task from WDT");
            }
#endif
        }
    }
    vTaskDelete(NULL);
    _async_service_task_handle = NULL;
}

Nun habe ich testweise CONFIG_ASYNC_TCP_USE_WDT auf 0 gesetzt und es funktioniert.
Ist das Pfusch, einfach den Watchdog auszuschalten? Hat es irgend einen tieferen Sinn, dass in dieser Funktion in der Schleife der Task die ganze Zeit an- und wieder abgemeldet wird?
Müsste nicht vor der Schleife der Task hinzugefügt werden und in der Schleife esp_task_wdt_reset() aufgerufen werden?

Vielen Dank schonmal :slight_smile:

LG

Das gleiche Problem habe ich auch.
Wenn ich aber CONFIG_ASYNC_TCP_USE_WDT 0 setze, hängt sich der ESP auf und startet nicht mehr neu.
Hast du es irgendwie geschafft, dem wdt mehr Zeit zu geben oder ihn regelmäßig zu füttern?

@freddy64
Ich habe am Anfang in der Setup Funktion

    disableCore0WDT();
    disableCore1WDT();
    disableLoopWDT();

stehen. Damit Schalte ich den wdt für die IDLE Tasks für die beiden Kerne und für den Loop Task aus.
Das ist das Einzige in meinem Projekt, wo ich sonst noch den wdt anfasse.