fix(P4): Endlose Neustartschleife nach Kaltstart (1.9.11) #80

Merged
thomas merged 1 commits from fix/kaltstart-neustartschleife into main 2026-09-03 15:09:03 +02:00
2 changed files with 41 additions and 11 deletions
Showing only changes of commit 5df6c20171 - Show all commits
+13
View File
@@ -1,3 +1,16 @@
Version 1.9.11:
- Endlose Startschleife behoben: Beleuchtung an, nie ein Bild. Der P4 startet sich nach dem
Einschalten absichtlich einmal neu, weil das Panel sonst schwarz bleibt. Die Absicherung
dagegen verließ sich darauf, dass der zweite Start kein Kaltstart mehr ist - der Chip
meldet aber auch nach dem selbst ausgelösten Neustart wieder einen Kaltstart. Damit griff
die Bedingung erneut, endlos.
- Der Neustart wird jetzt vermerkt und beim zweiten Durchlauf erkannt, unabhängig davon, was
der Chip als Startgrund meldet. Beim nächsten echten Einschalten erfolgt wieder genau ein
Neustart.
- Die Meldung über diesen Neustart lief bisher über die USB-Verbindung und war im seriellen
Monitor nicht zu sehen - deshalb war von der Schleife nichts zu erkennen. Sie läuft jetzt
denselben Weg wie die übrigen Panel-Meldungen.
Version 1.9.10:
- Alle Messzeilen laufen jetzt auf derselben Uhr. Die des Zeichenablaufs startete später als
die des Hauptablaufs; die Zeiten ließen sich nur mit Umrechnung vergleichen.
+28 -11
View File
@@ -336,19 +336,36 @@ void setup() {
// nicht (siehe WS7_DSI_RESTART).
//
// Deshalb startet der P4 sich nach einem Kaltstart genau einmal selbst neu, nachdem
// der erste Hochlauf durch ist. Beim zweiten Durchlauf ist der Startgrund kein
// Kaltstart mehr, die Bedingung greift also nicht erneut - eine Schleife ist
// ausgeschlossen. Kostet rund drei Sekunden, aber nur beim Einschalten.
// der erste Hochlauf durch ist. Kostet rund drei Sekunden, aber nur beim Einschalten.
//
// Frueher stuetzte sich die Absicherung dagegen allein auf den Startgrund: Beim zweiten
// Durchlauf sei es kein Kaltstart mehr, eine Schleife also ausgeschlossen. Das stimmt
// nicht - der Chip meldet auch nach dem selbst ausgeloesten Neustart wieder einen
// Kaltstart, und dann startet er endlos neu. Genau das ist aufgetreten: Beleuchtung an,
// nie ein Bild. Deshalb wird jetzt zusaetzlich vermerkt, dass der Neustart schon
// stattgefunden hat; darauf ist Verlass, unabhaengig vom gemeldeten Startgrund.
#if (JC_PANEL_TYPE == WS_PANEL_7H) && WS7_COLD_BOOT_RESTART
if (esp_reset_reason() == ESP_RST_POWERON) {
// Der Fruehstart-Zaehler wurde oben bereits erhoeht. Diesen gewollten Neustart
// darf er nicht mitzaehlen, sonst laeuft die Absturzsicherung nach ein paar
// Einschaltvorgaengen in den Update-Modus.
{ Preferences p; p.begin("bootguard", false); p.putUShort("early", 0); p.end(); }
DBG_SERIAL.println(F("[Panel] Kaltstart - einmaliger Neustart fuer das Displaypanel"));
DBG_SERIAL.flush();
delay(50);
esp_restart();
Preferences p;
p.begin("bootguard", false);
bool schonNeugestartet = p.getUChar("kaltneu", 0) != 0;
if (schonNeugestartet) {
// Zweiter Durchlauf: Vermerk loeschen, damit beim naechsten echten Einschalten
// wieder genau ein Neustart erfolgt.
p.putUChar("kaltneu", 0);
p.end();
esp_rom_printf("[Panel] Neustart bereits erfolgt - Hochlauf wird fortgesetzt\n");
} else {
p.putUChar("kaltneu", 1);
// Der Fruehstart-Zaehler wurde oben bereits erhoeht. Diesen gewollten Neustart
// darf er nicht mitzaehlen, sonst laeuft die Absturzsicherung nach ein paar
// Einschaltvorgaengen in den Update-Modus.
p.putUShort("early", 0);
p.end();
esp_rom_printf("[Panel] Kaltstart - einmaliger Neustart fuer das Displaypanel\n");
delay(50);
esp_restart();
}
}
#endif
g_client.begin(); // UART starten, hello folgt automatisch in loop()