Nochmal ESP32 Watchdog und speziell RESET

Jetzt habe ich gerade gedacht ich wäre mit meiner Watchdog-Lösung zufrieden da muss
ich feststellen dass das ESP.restart() das ich in der WD-Callback aufrufe nicht jedesmal
arbeitet.
Manchmal landet der ESP danach in einer Endlosschleife in der er ohne Ende etwas in einer
mir nicht bekannte Baud-Rate auf der Seriellen ausgibt.

Auch die Initialisierung von esp_task_wdt_init(WATCHDOG_TIMEOUT,false) auf
esp_task_wdt_init(WATCHDOG_TIMEOUT,true) ändert nichts.

Jetzt habe ich mal einen IO-Pin mit dem Reset(EN) Eingang verbunden und ziehe den im Callback
auf LOW. Klappt bedeuten besser aber auch nicht zu 100%. Manchmal landet er immer noch in der Endlosschleife. Ein weitere Nachteil der Methode ist das der Resettaster (natürlich) nicht mehr geht wenn die Brücke gesteckt ist.

Bei allem Googlen habe ich schon häufig von diesen Problemen gelesen.
Hat jemand eine sichere Lösung ?

Ulli

Vorsicht!
In der Meldung könnte stehen, warum er den Arsch nicht hoch bekommt.
Also keinesfalls lesen.
Am Besten, noch nicht einmal ignorieren.

Und ja, die Baudrate der Bootmeldungen ist wohl fürchterlich geheim, die wird bestimmt nur heimlich, unter der Hand, weiter gegeben.

Ernsthaft?
Drei Threads zum selben Thema?

Also für meine Begriffe sind das schon verschiedene Themen wenn sie sich auch
auf einen Aspekt beziehen. Die anderen beiden habe ich ja schon auf "gelöst"
gesetzt. Und die Baudrate beim ESP32 ist auch beim Hochlauf normalerweise 115200.

Ulli

Ja, dann steht doch dem lesen der Meldung nichts im Wege, oder?

Tja...
Warten wir es mal ab....

Wenn es für dich neue Themen sind dann poste

  • Welchen ESP hast du, Datasheet verlinken.
  • Poste deinen Sketch
  • Poste deinen Schaltplan wie du was beschaltet hast
  • beschreibe was der Sketch machen SOLL
  • beschreibe was der Sketch unter welchen Umständen macht. Das ist der Fehler den man suchen kann.

Das mache bitte jedes mal wenn du einen neuen Post anfängst.

Jetzt habe ich mal im WDT-Callback die Interrupts gesperrt und siehe es funktioniert
wesentlich besser. Aber nicht 100%. Dann habe ich die Resetleitung von GPIO25 zu EN
entfernt und auch den Code für den "Hardwarereset" wieder entfernt so das nur
die erste Version + Interrupts sperren übrig blieb :

#define WATCHDOG_TIMEOUT 3
#define EEPROM_SIZE 1

uint8_t BoraBoot;

//---------------------------------------------------------------------------
// Watchdog routines (name of the dog is Bora :-)
//---------------------------------------------------------------------------

extern "C" void esp_task_wdt_isr_user_handler()
{
  portDISABLE_INTERRUPTS();
  EEPROM.write(0,(uint8_t) 1);
  EEPROM.commit();
  ESP.restart();
}

//---------------------------------------------------------------------------
// Setup the Watchdog for three seconds
//---------------------------------------------------------------------------

void BoraSetup()
{
  esp_task_wdt_init(WATCHDOG_TIMEOUT,false); //Init Watchdog with 3 seconds timeout
  esp_task_wdt_add(NULL); 
}

Das scheint bisher gut zu arbeiten.
Ich kann über eine eingebaute WebSeite den Watchdog absichtlich durch Endlosschleife auslösen und werde es jetzt immer mal wieder probieren. Hat bisher 8x hintereinander geklappt. So oft
ging es noch nie.

Ich werde über den hoffentlich endgültigen Erfolg berichten.

Ulli

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.