Also ich habe es inzwischen selbst rausgefunden...
Man übergibt als Parameter eine putchar und/oder getchar Funktion.
Die putchar Funktion muss genau einen Parameter des Typs Char haben,
und eine 0 zurückliefern wenn das Zeichen erfolgreich geschrieben wurde.
Die getchar Funktion muss ein Zeichen lesen und als int zurückliefern.
ganz allgemein müssen die Funktionen also so aussehen:
int putchar(char c) und int getchar(void)
fdevopen liefert letztendlich einen Pointer auf eine Variable vom Typ FILE.
Das ist allesCode:FILE* lcdout; lcdout = fdevopen(LCD_putchar, NULL, 0);
Man kann jetzt mit der Funktion fprintf() formatierten Text ausgeben.
(Dabei muss als erster Parameter der Ausgabestream angegeben werden)
z.B.
fprintf(lcdout, "Das ist ein Integer: %u", 1234);
Leider funktionieren standardmässig nicht alle Formatierungszeichen.
%f und %X z.B. liefern keine sinnvolle Ausgabe.
Man kann aber im Makefile einstellen welche Implementierung von printf() verwendet werden soll.
dabei ist u.a. eine vollständige Variante bei der auch %f etc. funktionieren, allerdings steigt die Codegrösse dann enorm an.
bei meinem Testprogramm von 11% bei der kleinsten Implementierung auf 21% bei der grössten
(ganz ohne Verwendung von printf werden nur 5% Flash belegt)
Lesezeichen