Infomationen zu fdevopen

Gast #263999
Lesenswert?
• ▲
▼
Hallo,

ich möchte die Funktion "printf" für die Ansteuerung eines Displays,
sowie der seriellen Schnittstelle nutzen. Bis jetzt ist mir eine
Differenzierung zwischen zwei Gräten nicht gelungen.
Meine Vermutung ist die, dass es möglich sein müsste mittels
"fdevopen" einen weiteren Kanal zu öffnen, den man dann bei printf
angibt.

Alles was ich brauch ist eine ausfühliche Dokumentation zu "fdevopen"
bzw. "printf". Könnt ihr mir da weiterhelfen?

Gruß
Julius
Gast #264002
Lesenswert?
• ▲
▼
@OldBug: Nein, er möchte fprintf verwenden. fdevopen öffnet einen
Stream. Der erste Stream, der zum Schreiben geöffnet wird, wird stdout
und stderr und kann mit printf verwendet werden. Weitere Streams, die
mit fdevopen geöffnet werden, können fprintf (NICHT printf) als
Parameter übergeben werden. So steht es in der Doku.
Persönliche Seite #264003
Lesenswert?
• ▲
▼
Hi

also entweder er öffnet und schließt den Stream für printf ständig oder
aber er öffnet eben zwei Streams und wählt dann per Parameter von
fprintf() aus welches Gerät (welcher Stream) den jetzt benutzt werden
soll.

Das er nach fprintf() sucht und dann eben zweimal fdevopen() aufrufen
muss sehe ich als bessere Lösung an als ständig Streams zu öffnen und
zu schließen.

Matthias
Gast #264005
Lesenswert?
• ▲
▼
Mal sehen ob ich es richtig verstanden hab:

//Asugeabefunktionen
int uart_putchar (char c){...};
int lcd_putchar (char c){...};

//Initialisierung der beiden Streams
fdevopen (uart_putchar, NULL, 0);
fdevopen (lcd_putchar, NULL, 0);

//Ausgabe aufs Display und LCD
fprintf(uart_putchar,"Hi PC");
fprintf(lcd_putchar,"Hi LCD");

Müsste doch gehen, oder?

@Chrisitan: Der Link funktioniert nicht, kannst du da mal nachschauen?
Gast #264007
Lesenswert?
• ▲
▼
Gut, abgeändert müsste es demnach so aussehen:

//Initialisierung der beiden Streams
uart_filehandle = fdevopen (uart_putchar, NULL, 0);
lcd_filehandle = fdevopen (lcd_putchar, NULL, 0);

//Ausgabe aufs Display und LCD
fprintf(uart_filehandle,"Hi PC");
fprintf(lcd_filehandle,"Hi LCD");

Wie nehme ich nun die Initialsierung der beiden filehandle-Variablen
vor? ist es wirklich so einfach:

FILE *uart_filehandle, *lcd_filehandle;
#264012
Lesenswert?
• ▲
▼
Eine Variable definieren

int main()
{
  FILE* uart_filehandle;
  FILE* lcd_filehandle;

  uart_filehandle = fdevopen (uart_putchar, NULL, 0);

  /* fertig zur Benutzung */

OK. Wenn Du unbedingt willst, kannst Du auch initialisieren:

int main()
{
  FILE* uart_filehandle = NULL;

oder

int main()
{
  FILE* uart_filehandle = fdevopen (uart_putchar, NULL, 0);

spielt aber keinen Walzer :-)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.