Ich schreibe eine C-Bibliothek für PIC18-Mikrocontroller, die mit dem ESP8266- Chip über den UART-Bus kommunizieren . Ich möchte die printf()
Funktion verwenden, um formatierte Zeichenfolgen an den Chip zu senden.
Verwendet in XC8 printf()
die Funktion putch()
, die der Benutzer als Ausgabe definieren soll. Auf diese Weise kann der Benutzer entscheiden, ob er UART, LCD, ... für stdout verwenden möchte.
Das gibt mir ein Problem. In der Bibliothek, die ich verwenden möchte , printf()
die auf basiert putch()
, kann (sollte) ich dies nicht putch()
in der Bibliothek deklarieren, da dies zu einem Konflikt führen würde, wenn ein Benutzer den ESP8266 in Kombination mit einem LCD verwenden möchte, für das er bereits definiert hat putch()
. Wie kann ich dieses Problem lösen?
Ich könnte verwenden sprintf()
, um die Zeichenfolge vorübergehend im Speicher zu speichern und dann meinen eigenen Code zu schreiben, um diesen Byte für Byte in das ESP zu schreiben, aber ich würde es wegen Speicher- und Zeitineffizienz lieber nicht tun.
Ich könnte auch meine eigene esp8266_printf()
mit eingeschränkter Funktionalität rollen und diese stattdessen verwenden, aber das fühlt sich auch nicht so gut an.
Gibt es dafür eine saubere(r) Lösung?
Sie könnten einen benutzerdefinierten PUTCH erstellen, der zur Laufzeit entscheidet, was mit dem Byte geschehen soll. Dies würde auf einer von Ihnen gepflegten globalen Einstellung basieren. Sie würden die globale Einstellung ändern, um Charaktere dorthin zu leiten, wo Sie sie gerade haben möchten. Eine davon kann die Routine eines Kunden sein, obwohl sie anders als PUTCH heißen müsste.
Benutzer17592
Ignacio Vazquez-Abrams
fprintf()
verfügbar?Benutzer17592