perf(P4): Teil-Neuzeichnen als Vorgabe, Messeinblendung, deckende Seiten (1.6.10) #38

Merged
thomas merged 1 commits from perf/scrollen-messen-und-vorgaben into main 2026-09-01 14:46:56 +02:00
5 changed files with 35 additions and 12 deletions
+11
View File
@@ -1,3 +1,14 @@
Version 1.6.10:
- WS7_PARTIAL_REFRESH ist jetzt auch im Auslieferungsstand 1. Am Gerät geprüft: kein
Flackern, und der Gewinn ist der größte der drei Tempo-Maßnahmen - vor allem während
eines Bezugs, wo die Zeitanzeige zehnmal je Sekunde weiterläuft.
- Der Hintergrund der Seiten ist deckend statt durchsichtig. Sichtbar ändert sich nichts,
die Ebenen darunter haben dieselbe Farbe; LVGL muss sie beim Scrollen aber nicht mehr
mitzeichnen und durchmischen.
- Neuer Schalter WS7_PERF_MONITOR in pins_config.h: blendet unten rechts Bilder je Sekunde
und Prozessorlast ein. Damit lässt sich beantworten, ob weitere Mühe beim Zeichnen
überhaupt noch etwas bringt, statt ins Blaue zu optimieren.
Version 1.6.9: Version 1.6.9:
- Fehlerbehebung: Ein Tipp auf einen Knopf löste oft mehrfach aus. Der GT9271 lässt - Fehlerbehebung: Ein Tipp auf einen Knopf löste oft mehrfach aus. Der GT9271 lässt
gelegentlich einen Messzyklus aus oder liefert ein unplausibles Paket; der gelegentlich einen Messzyklus aus oder liefert ein unplausibles Paket; der
+1 -1
View File
@@ -126,7 +126,7 @@
// ------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------
// Firmware // Firmware
// ------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------
#define DISPLAY_FW_VERSION "1.6.9" // Firmware-Stand der P4-Display-Steuerung (Info-Seite) #define DISPLAY_FW_VERSION "1.6.10" // Firmware-Stand der P4-Display-Steuerung (Info-Seite)
// ------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------
// Protokoll // Protokoll
+6 -1
View File
@@ -915,14 +915,19 @@
#define LV_USE_SNAPSHOT 0 #define LV_USE_SNAPSHOT 0
/*1: Enable system monitor component*/ /*1: Enable system monitor component*/
/* Nur fuer die Messeinblendung des Waveshare-Panels, siehe WS7_PERF_MONITOR. */
#if (JC_PANEL_TYPE == WS_PANEL_7H) && WS7_PERF_MONITOR
#define LV_USE_SYSMON 1
#else
#define LV_USE_SYSMON 0 #define LV_USE_SYSMON 0
#endif
#if LV_USE_SYSMON #if LV_USE_SYSMON
/*Get the idle percentage. E.g. uint32_t my_get_idle(void);*/ /*Get the idle percentage. E.g. uint32_t my_get_idle(void);*/
#define LV_SYSMON_GET_IDLE lv_timer_get_idle #define LV_SYSMON_GET_IDLE lv_timer_get_idle
/*1: Show CPU usage and FPS count /*1: Show CPU usage and FPS count
* Requires `LV_USE_SYSMON = 1`*/ * Requires `LV_USE_SYSMON = 1`*/
#define LV_USE_PERF_MONITOR 0 #define LV_USE_PERF_MONITOR 1
#if LV_USE_PERF_MONITOR #if LV_USE_PERF_MONITOR
#define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT
+12 -9
View File
@@ -20,14 +20,13 @@
// an - mit 16 kommt kein brauchbares Bild. Einstellbar bleibt es // an - mit 16 kommt kein brauchbares Bild. Einstellbar bleibt es
// nur, weil andere Waveshare-Panels an derselben Firmware // nur, weil andere Waveshare-Panels an derselben Firmware
// haengen koennten. // haengen koennten.
// WS7_PARTIAL_REFRESH 0 = Vollbild neu zeichnen. GEPRUEFT: Mit 1 (nur geaenderte // WS7_PARTIAL_REFRESH 1 = nur geaenderte Bildbereiche neu zeichnen statt jedes Mal des
// Bereiche, zwei wechselnde Bildpuffer) laesst sich der // gesamten Bildes (LVGL-Direct-Mode, zwei wechselnde Puffer).
// Menue-Vorhang nicht mehr oeffnen. Er ist halbtransparent und // Groesster Tempogewinn, besonders waehrend eines Bezugs: Die
// wird in den gerade aktiven Puffer eingemischt; die naechste // Zeitanzeige laeuft zehnmal je Sekunde weiter, und mit 0 wuerde
// Zustandsmeldung der S3 zeichnet in den anderen, der ihn nie // dafuer jedes Mal das ganze Bild neu gezeichnet. Am Geraet
// bekommen hat. Am 4,3-Zoll-Panel hatte derselbe Modus // geprueft, kein Flackern - am 4,3-Zoll-Panel hatte derselbe
// geflackert. Nutzbar erst, wenn der LVGL-Port die geaenderten // Modus dagegen geflackert.
// Bereiche zwischen beiden Puffern abgleicht.
// WS7_PARALLEL_RENDER 1 = LVGL zeichnet mit zwei Threads auf beiden Prozessorkernen. // WS7_PARALLEL_RENDER 1 = LVGL zeichnet mit zwei Threads auf beiden Prozessorkernen.
// Kostet zwei zusaetzliche Task-Stacks im knappen internen RAM; // Kostet zwei zusaetzliche Task-Stacks im knappen internen RAM;
// startet der P4 nicht mehr, hier zuerst auf 0 stellen. // startet der P4 nicht mehr, hier zuerst auf 0 stellen.
@@ -127,6 +126,10 @@
#define WS7_TOUCH_MIRROR_RAW_X 1 #define WS7_TOUCH_MIRROR_RAW_X 1
#define WS7_TOUCH_MIRROR_RAW_Y 0 #define WS7_TOUCH_MIRROR_RAW_Y 0
// Zeigt unten rechts Bilder je Sekunde und Prozessorlast ein. Nur zum Messen gedacht:
// Der Wert sagt, ob sich weitere Muehe beim Zeichnen ueberhaupt lohnt.
#define WS7_PERF_MONITOR 0
// Zum Einmessen des Touch: 1 gibt jeden Beruehrpunkt roh und umgerechnet auf der // Zum Einmessen des Touch: 1 gibt jeden Beruehrpunkt roh und umgerechnet auf der
// seriellen Konsole aus. Danach wieder auf 0, sonst laeuft das Log dauernd mit. // seriellen Konsole aus. Danach wieder auf 0, sonst laeuft das Log dauernd mit.
#define WS7_TOUCH_DEBUG 0 #define WS7_TOUCH_DEBUG 0
@@ -145,7 +148,7 @@
#define LCD_RST 27 #define LCD_RST 27
#define LCD_LED 23 #define LCD_LED 23
#else #elsealle
#define LCD_H_RES 480 #define LCD_H_RES 480
#define LCD_V_RES 800 #define LCD_V_RES 800
+5 -1
View File
@@ -453,7 +453,11 @@ static lv_obj_t* make_page(lv_obj_t* parent) {
lv_obj_t* p = lv_obj_create(parent); lv_obj_t* p = lv_obj_create(parent);
lv_obj_set_size(p, LV_PCT(100), LV_PCT(100)); lv_obj_set_size(p, LV_PCT(100), LV_PCT(100));
lv_obj_set_pos(p, 0, 0); lv_obj_set_pos(p, 0, 0);
lv_obj_set_style_bg_opa(p, LV_OPA_TRANSP, 0); // Deckend in der Hintergrundfarbe statt durchsichtig. Sieht identisch aus - die Ebenen
// darunter haben dieselbe Farbe -, erspart LVGL beim Scrollen aber, sie mitzuzeichnen
// und durchzumischen.
lv_obj_set_style_bg_color(p, COL_BG, 0);
lv_obj_set_style_bg_opa(p, LV_OPA_COVER, 0);
lv_obj_set_style_border_width(p, 0, 0); lv_obj_set_style_border_width(p, 0, 0);
lv_obj_set_style_pad_all(p, 8, 0); lv_obj_set_style_pad_all(p, 8, 0);
lv_obj_set_style_pad_row(p, 6, 0); lv_obj_set_style_pad_row(p, 6, 0);