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.
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.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01NeFMr439WcLMdebE3kU7fS
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
thomas
merged commit 32280a7ea3 into main2026-09-03 13:17:30 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ursache gefunden.
lv_draw_label.clegt 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. MitLV_DRAW_SW_DRAW_UNIT_CNT 2sind zwei davon gleichzeitig offen, also ~97 KB. Der LVGL-Pool (LV_MEM_SIZE256 KB) hatte laut Herzschlag nur 98068 Byte am Stück frei - es reichte knapp nicht.LV_USE_ASSERT_MALLOCist 1 undLV_ASSERT_HANDLERwarwhile(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überlv_draw_buf_get_font_handlers(): Puffer ab 16 KB kommen perheap_caps_mallocaus dem PSRAM, kleinere weiter aus dem LVGL-Pool (schneller; sonst würde jeder Text langsamer). Freigabe unterscheidet überesp_ptr_external_ram().LV_ASSERT_HANDLERgibt jetzt eine Meldung aus, bevor er anhält.Der interne RAM bleibt unangetastet -
LV_MEM_SIZEzu erhöhen war keine Option, der statische Speicher liegt bereits bei ~98 %.Beide Panel-Varianten mit arduino-cli gegengebaut.
🤖 Generated with Claude Code
https://claude.ai/code/session_01NeFMr439WcLMdebE3kU7fS