Habe mein Problem inzwischen selbst eingrenzen können:
Irgendwie funktionieren die Macros der Entwickler nicht ordentlich mit
meiner Entwicklungsumgebung und sie haben vergessen (?) an einigen
Stellen die Definitionen zu ändern, um Daten aus dem Programmspeicher zu
holen, daher wird Pixelmüll dargestellt. Es ist mir nun gelungen,
Schriften und Grafiken korrekt darzustellen. Doch nochmal von Anfang an:
Das Rastern der Glyphen erfolgt durch die Funktion gfx_blitRaster in der
Datei bertos/gfx/bitmap.c:197. Die Makros in der letzten Zeile sind
definiert in der Datei bertos/gfx/gfx_p.h, dort steht in Zeile 136:
1 | #define RAST_READPIXEL(raster, x, y, stride) \
|
2 | ( *RAST_ADDR(raster, x, y, stride) & RAST_MASK(raster, x, y) ? 1 : 0 )
|
das habe ich geändert in
1 | #define RAST_READPIXEL(raster, x, y, stride) \
|
2 | ( pgm_read_byte(RAST_ADDR(raster, x, y, stride)) & RAST_MASK(pgm_read_byte(raster), x, y) ? 1 : 0 )
|
Interessant (und lästig zugleich) ist die Tatsache, daß die
mitgelieferten Makros PGM_READ_CHAR bei mir NICHT IMMER funktionierten,
zumindest war beim Debuggen ein Unterschied feststellbar, das untersuche
ich aber später.
Für die proportionalen Schriften sind noch 2 weitere Arrays im
Programmspeicher abgelegt:
1 | static const PROGMEM uint16_t luBS14_offset[] und static const PROGMEM uint16_t luBS14_width[].
|
In der Datei bertos/gfx/text.c:112 findet die Fallunterscheidung statt,
ob eine proportionale oder fest-breiten Schrift dargestellt wird. Dort
habe ich dann folgendes geändert:
1 | /* Proportional font */
|
2 | glyph_width = pgm_read_byte(&bm->font->widths[index]); /* TODO: optimize away */
|
3 | glyph = bm->font->glyph + pgm_read_word(&bm->font->offset[index]);
|
Damit die Zentrierung des Textes auf dem Display korrekt berechnet wird,
muss noch in der Datei text_format.c in Zeile 248 das hier stehen:
1 | glyph_width = pgm_read_byte(&bm->font->widths[index]);
|
Et voilá, jetzt läuft's. Verzeiht, wenn ich vorzeitig hier um Hilfe
gebeten habe ohne vorher nicht alles selbst versucht zu haben, es
alleine hinzubekommen. Doch dazu sind doch Foren da...
Remember:
Peter schrieb:
> Der Lerneffekt beim selbständigen Lösen einer Aufgabe ist viel grösser
> als beim nachvollziehen eine vorgekackten Musterlösung...