perf(P4): Darstellung am Waveshare-Panel beschleunigen (1.6.4)
1280x720 sind 2,4-mal so viele Pixel wie beim 4,3-Zöller, und bis 1.6.3 wurde bei jeder Änderung das komplette Bild in 24 Bit neu gezeichnet. Drei Schalter in pins_config.h, einzeln zurückstellbar: - WS7_COLOR_BITS = 16: RGB565 statt RGB888, halbe Datenmenge je Bild. lv_conf.h liest den Wert aus pins_config.h, damit Sketch und LVGL-Bibliothek dieselbe Farbtiefe benutzen; display_hal.cpp sichert das per static_assert. - WS7_PARTIAL_REFRESH = 1: Avoid-Tear-Mode 3 (Direct-Mode, zwei Puffer) statt Vollbild-Neuzeichnen. - WS7_PARALLEL_RENDER = 1: LV_USE_OS = FREERTOS und zwei Zeichen-Threads. Framebuffer-Bedarf sinkt dadurch von rund 8,3 MB auf 3,7 MB PSRAM. Die JC-Panels sind von allen drei Schaltern nicht betroffen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018QoLDQeUh1dCQz7yYZVb4Y
This commit is contained in:
co-authored by
Claude Opus 5
parent
ee5888ed97
commit
a8ae034911
@@ -26,18 +26,18 @@
|
||||
COLOR SETTINGS
|
||||
*====================*/
|
||||
|
||||
/* Panel-Typ des Projekts. Liegt im selben Ordner wie diese Datei, ein Include mit
|
||||
* Anfuehrungszeichen findet also immer genau diese config.h - auch dann, wenn die
|
||||
* LVGL-Bibliothek uebersetzt wird. Nur so bekommen Sketch UND Bibliothek dieselbe
|
||||
* Farbtiefe; ein Compiler-Flag allein wuerde die Bibliothek nicht erreichen. */
|
||||
#include "config.h"
|
||||
/* Panel- und Tempo-Einstellungen des Projekts. Die Datei liegt im selben Ordner wie
|
||||
* diese hier, ein Include mit Anfuehrungszeichen findet also immer genau sie - auch
|
||||
* dann, wenn die LVGL-Bibliothek uebersetzt wird. Nur so bekommen Sketch UND Bibliothek
|
||||
* dieselben Werte; ein Compiler-Flag allein wuerde die Bibliothek nicht erreichen. */
|
||||
#include "pins_config.h"
|
||||
|
||||
/*Color depth: 1 (I1), 8 (L8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888)*/
|
||||
/* Waveshare 7inch DSI LCD (H): Die Bridge des Panels nimmt ausschliesslich RGB888
|
||||
* entgegen, deshalb muss auch LVGL in 24 Bit rechnen. Die JC-Panels laufen wie
|
||||
* bisher mit RGB565. */
|
||||
/* Waveshare 7inch DSI LCD (H): Farbtiefe kommt aus WS7_COLOR_BITS (pins_config.h) -
|
||||
* 16 Bit halbiert die Datenmenge je Bild, 24 Bit bringt feinere Verlaeufe.
|
||||
* Die JC-Panels laufen unveraendert mit RGB565. */
|
||||
#if JC_PANEL_TYPE == WS_PANEL_7H
|
||||
#define LV_COLOR_DEPTH 24
|
||||
#define LV_COLOR_DEPTH WS7_COLOR_BITS
|
||||
#else
|
||||
#define LV_COLOR_DEPTH 16
|
||||
#endif
|
||||
@@ -109,7 +109,14 @@
|
||||
* - LV_OS_WINDOWS
|
||||
* - LV_OS_MQX
|
||||
* - LV_OS_CUSTOM */
|
||||
/* Nur mit einem Betriebssystem kann LVGL auf mehreren Kernen zeichnen. Beim
|
||||
* Waveshare-Panel wird das gebraucht (WS7_PARALLEL_RENDER), sonst bleibt es aus -
|
||||
* die JC-Panels sollen sich nicht aendern. */
|
||||
#if (JC_PANEL_TYPE == WS_PANEL_7H) && WS7_PARALLEL_RENDER
|
||||
#define LV_USE_OS LV_OS_FREERTOS
|
||||
#else
|
||||
#define LV_USE_OS LV_OS_NONE
|
||||
#endif
|
||||
|
||||
#if LV_USE_OS == LV_OS_CUSTOM
|
||||
#define LV_OS_CUSTOM_INCLUDE <stdint.h>
|
||||
@@ -175,7 +182,14 @@
|
||||
/* Set the number of draw unit.
|
||||
* > 1 requires an operating system enabled in `LV_USE_OS`
|
||||
* > 1 means multiple threads will render the screen in parallel */
|
||||
/* Der ESP32-P4 hat zwei Kerne. Beim grossen Waveshare-Panel lohnt es sich, beide
|
||||
* zum Zeichnen zu benutzen; jeder Zeichen-Thread kostet einen eigenen Stack im
|
||||
* knappen internen RAM. */
|
||||
#if (JC_PANEL_TYPE == WS_PANEL_7H) && WS7_PARALLEL_RENDER
|
||||
#define LV_DRAW_SW_DRAW_UNIT_CNT 2
|
||||
#else
|
||||
#define LV_DRAW_SW_DRAW_UNIT_CNT 1
|
||||
#endif
|
||||
|
||||
/* Use Arm-2D to accelerate the sw render */
|
||||
#define LV_USE_DRAW_ARM2D_SYNC 0
|
||||
|
||||
Reference in New Issue
Block a user