Eine printf-Implementierung in avr-gcc-Assembler. Benötigt nur 390 Byte Kode, gemessen ohne Zeichenausgaberoutine.
printf
ist prinzipiell
nicht so toll fĂĽr kleine Mikrocontroller geeignet.
Es ist fĂĽr Programme mit Betriebssystemumgebung gemacht
(„hosted“), nicht für Programme ohne Betriebssystem
(„freestanding“).
Nervig ist:
printf
-Implementierungen
sprintf
,
um das Komma einzupopeln
WĂĽnschenswert ist:
printf
-Funktion,
ohne externe Referenzen
printf
und
printf_P
in einer Funktion
"%{falsch|wahr}"
,
d.h. '{'
als neues Formatierungszeichen.
Die Funktion vuprintf
ist nur von Assembler aus aufrufbar.
printf
auf den Stack gelangt, wie va_list
chrout
chrout
= Funktion zur Zeichenausgabe in Assembler oder Inline-Assembler.read_byte_pp
= Funktion zum Byte-Lesen von einer von-neumannisierten Adresse.
Bereits eingebaut, aber wer will kann ja noch EEPROM-Zugriff u.ä. einbauen!chrout
vorgerĂĽcktes Zeigerregister
Die Funktion uprintf
, ein Wrapper fĂĽr vuprintf
,
ist ganz normal von C/C++ aufrufbar.
Die Funktion chrout
muss selbst geschrieben werden
und ist nicht Teil der Assemblerroutine.
Mit dem Zeigerregister X ist viel Flexibilität gegeben, etwa:
sprintf
,
struct
mit einem Ausgabemethodenzeiger,
faktisch eine Lambdafunktion mit Capture,
8051 | PIC | AVR | C166 |
---|---|---|---|
- | - | uprintf.S | - |