fix(P4): Endlose Neustartschleife nach Kaltstart (1.9.11) #80
@@ -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:
|
Version 1.9.10:
|
||||||
- Alle Messzeilen laufen jetzt auf derselben Uhr. Die des Zeichenablaufs startete später als
|
- 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.
|
die des Hauptablaufs; die Zeiten ließen sich nur mit Umrechnung vergleichen.
|
||||||
|
|||||||
@@ -336,20 +336,37 @@ void setup() {
|
|||||||
// nicht (siehe WS7_DSI_RESTART).
|
// nicht (siehe WS7_DSI_RESTART).
|
||||||
//
|
//
|
||||||
// Deshalb startet der P4 sich nach einem Kaltstart genau einmal selbst neu, nachdem
|
// 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
|
// der erste Hochlauf durch ist. Kostet rund drei Sekunden, aber nur beim Einschalten.
|
||||||
// Kaltstart mehr, die Bedingung greift also nicht erneut - eine Schleife ist
|
//
|
||||||
// ausgeschlossen. 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 (JC_PANEL_TYPE == WS_PANEL_7H) && WS7_COLD_BOOT_RESTART
|
||||||
if (esp_reset_reason() == ESP_RST_POWERON) {
|
if (esp_reset_reason() == ESP_RST_POWERON) {
|
||||||
|
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
|
// Der Fruehstart-Zaehler wurde oben bereits erhoeht. Diesen gewollten Neustart
|
||||||
// darf er nicht mitzaehlen, sonst laeuft die Absturzsicherung nach ein paar
|
// darf er nicht mitzaehlen, sonst laeuft die Absturzsicherung nach ein paar
|
||||||
// Einschaltvorgaengen in den Update-Modus.
|
// Einschaltvorgaengen in den Update-Modus.
|
||||||
{ Preferences p; p.begin("bootguard", false); p.putUShort("early", 0); p.end(); }
|
p.putUShort("early", 0);
|
||||||
DBG_SERIAL.println(F("[Panel] Kaltstart - einmaliger Neustart fuer das Displaypanel"));
|
p.end();
|
||||||
DBG_SERIAL.flush();
|
esp_rom_printf("[Panel] Kaltstart - einmaliger Neustart fuer das Displaypanel\n");
|
||||||
delay(50);
|
delay(50);
|
||||||
esp_restart();
|
esp_restart();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
g_client.begin(); // UART starten, hello folgt automatisch in loop()
|
g_client.begin(); // UART starten, hello folgt automatisch in loop()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user