*** Dieser Beitrag bezieht sich primär auf den AVR-Port ***
Ich hab mal den Speicherbedarf in Abhängigkeit von der Konfiguration
ermittelt.
Den I2C-Core braucht man natürlich immer.
Der GFX-Core umfasst die Zeichen-Routinen für Linien, Kreise etc.
Wenn man nur die Text-Funktionen nutzt, werden die auch nicht gelinkt.
Speicherbedarf
1 | Modul | Code (Flash) | Stat. RAM
|
2 | ------------+--------------+------------
|
3 | I2C-Core | 234 Byte | 0
|
4 | Oled (TXT) | 1619 Byte | 9 Byte
|
5 | Oled (GFX) | 1759 Byte | 1027 Byte
|
6 | GFX-Core | 1252 Byte | 0
|
Im kleinsten Anwendungsfall kommen wir so auf 1853 Byte Code (Oled +
I2C) und 9 Byte RAM für den reinen Text-Mode mit 8 Zeilen zu 20 Zeichen.
Hier einige Performance Tests
Getestet wurde mit einem 20 Zeichen langen String
("12345678901234567890"), der via lcd_puts() in einer Zeile ausgegeben
wird.
Zum Messen wurde der String 10 mal ausgegeben, und die Zeit in ms
ermittelt.
Bei der display()-Funktion genauso.
Der I2C_bus läuft mit 400 kHz
1 | Mode | Zeit
|
2 | --------------+----------
|
3 | TXT (8 Lines) | 4.4 ms // 1 Zeile direkt zum Oled
|
4 | GFX (6 Lines) | 1.0 ms // 1 Zeile in Framebuffer schreiben
|
5 | GFX display() | 25.4 ms // Framebuffer auf Display kopieren
|
6 |
|
7 | Um ein gesamtes Display voll zu schreiben, benötigt man also
|
8 |
|
9 | ...im 8-Zeilen Text-Mode:
|
10 |
|
11 | 8 Zeilen * 4,4 ms = 35.2 ms
|
12 | =======
|
13 |
|
14 | ...im 6-Zeilen Graphic-Mode:
|
15 |
|
16 | 6 Zeilen * 1.0 ms = 6.0 ms
|
17 | + lcd_display() 25.4 ms
|
18 | ----------------------------
|
19 | 31.4 ms
|
20 | =======
|
p.s.
den 6-Zeilen-Graphic-Mode hab ich zum Test gewählt, da das die
aufwendigste Form der Darstellung ist, weil sich die Zeichen über 2
phys. Display-Zeilen erstrecken, und da einige Shift- und
Mask-Operationen im Spiel sind, die ich so ebenfalls erfasse.
.