fix(P4): Glyphenpuffer ins PSRAM - behebt Stillstand bei großer Standby-Uhr (1.9.8)
Ursache gefunden. lv_draw_label.c legt pro Glyphe einen A8-Draw-Buf an: box_w * LV_ROUND_UP(box_h, 32) Byte. Größte Ziffer des 360er-Fonts ist 190x247 -> 190*256 = 48 KB. Mit LV_DRAW_SW_DRAW_UNIT_CNT 2 sind zwei davon gleichzeitig offen, also ~97 KB. Der LVGL-Pool (LV_MEM_SIZE 256 KB) hatte laut Herzschlag nur 98068 Byte am Stück frei - es reichte knapp nicht. LV_USE_ASSERT_MALLOC ist 1 und LV_ASSERT_HANDLER war "while(1);". Bei fehlgeschlagener Allokation hält der LVGL-Task also stumm an: kein Panic, kein Backtrace, Log bricht einfach ab. Genau das beobachtete Bild. - font_buf_malloc/-free über lv_draw_buf_get_font_handlers(): Puffer ab 16 KB kommen per heap_caps_malloc aus dem PSRAM, kleinere weiter aus dem LVGL-Pool (schneller; sonst würde jeder Text langsamer). Freigabe unterscheidet über esp_ptr_external_ram(). - LV_ASSERT_HANDLER gibt jetzt eine Meldung aus, bevor er anhält. Der interne RAM bleibt unangetastet - LV_MEM_SIZE zu erhöhen war keine Option, der statische Speicher liegt bereits bei ~98 %. 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
4f2700d59a
commit
5988668026
@@ -374,8 +374,10 @@
|
||||
#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/
|
||||
|
||||
/*Add a custom handler when assert happens e.g. to restart the MCU*/
|
||||
#define LV_ASSERT_HANDLER_INCLUDE <stdint.h>
|
||||
#define LV_ASSERT_HANDLER while(1); /*Halt by default*/
|
||||
#define LV_ASSERT_HANDLER_INCLUDE <esp_rom_sys.h>
|
||||
// Frueher hielt LVGL hier stumm in einer Endlosschleife an - das Display stand, ohne dass
|
||||
// irgendwo etwas davon zu sehen war. Jetzt sagt es wenigstens, dass es angehalten hat.
|
||||
#define LV_ASSERT_HANDLER esp_rom_printf("[LVGL] Zusicherung verletzt - Zeichenablauf haelt an\n"); while(1);
|
||||
|
||||
/*-------------
|
||||
* Debug
|
||||
|
||||
Reference in New Issue
Block a user