diag(P4): Messpunkte für den Stillstand beim Standby-Wechsel (1.9.7)
Beim Wechsel in den Standby bleibt das Display stehen: Bild bleibt auf der alten Seite, keine Bedienung, auch der S3 weckt nicht mehr auf. Der Log bricht nach dem letzten Bildaufbau ab, ohne Panic. Statt zu raten, Messpunkte: - Herzschlag alle 2 s aus dem Arduino-loop (freier Heap) und aus einem lv_timer im LVGL-Task (lv_mem_monitor). Bleibt nur einer aus, ist klar, welcher Task steht. - ui_fade_in() der Standby-Uhr wird eingeklammert: "wird eingeblendet" / "eingeblendet, N ms". - hal_backlight() wird gemessen; über 50 ms wird die Dauer gemeldet. Der Bridge-Schreibzugriff läuft über denselben I2C-Bus wie der Touch. Außerdem entfernt: die LV_EVENT_INVALIDATE_AREA-Callbacks aus 1.9.5. Das Event geht per lv_display_send_event an das Display, nicht an Objekte - die Callbacks konnten nie feuern, ihr Ausbleiben war kein Beweis. Beide Panel-Varianten mit arduino-cli gegengebaut. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NeFMr439WcLMdebE3kU7fS
This commit is contained in:
co-authored by
Claude Opus 5
parent
06d9710b16
commit
0ec3d89973
@@ -67,11 +67,25 @@ static void onState(const MachineState& st) {
|
||||
}
|
||||
if (bl < 0) bl = 0; if (bl > 100) bl = 100;
|
||||
if (bl != s_lastBacklight) {
|
||||
// Vermessen: Rund um jeden Helligkeitswechsel hing die Bedienung bisher ein bis
|
||||
// zwei Sekunden. Der Schreibzugriff geht ueber denselben I2C-Bus wie der Touch.
|
||||
uint32_t t0 = millis();
|
||||
hal_backlight(bl);
|
||||
uint32_t dt = millis() - t0;
|
||||
if (dt > 50) Serial.printf("[HAL] Helligkeit %d %% gesetzt, %u ms\n", bl, (unsigned)dt);
|
||||
s_lastBacklight = bl;
|
||||
}
|
||||
}
|
||||
|
||||
// Herzschlag aus dem Haupt-Ablauf. Zusammen mit dem Herzschlag aus dem Zeichen-Ablauf
|
||||
// laesst sich unterscheiden, welcher der beiden stehen bleibt, wenn nichts mehr geht.
|
||||
static void main_heartbeat() {
|
||||
static uint32_t s_last = 0;
|
||||
if (millis() - s_last < 2000) return;
|
||||
s_last = millis();
|
||||
Serial.printf("[Haupt] Herzschlag, freier Speicher %u Byte\n", (unsigned)ESP.getFreeHeap());
|
||||
}
|
||||
|
||||
static void onAck(uint32_t id, bool ok, const String& message) {
|
||||
// Automatische/Heartbeat-Acks nicht als Toast zeigen (pong, Handshake, Listen-Refresh).
|
||||
bool routine = ok && (message == "pong" || message == "hello" ||
|
||||
@@ -332,6 +346,7 @@ static unsigned long s_lastDbgMs = 0;
|
||||
#endif
|
||||
|
||||
void loop() {
|
||||
main_heartbeat();
|
||||
g_client.loop(); // UART lesen, hello/heartbeat, state -> UI
|
||||
hal_loop(); // realer Modus: leer; Stub-Modus: lv_timer_handler()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user