Was genau macht fdevopen()?

Gast #1023513
Lesenswert?
• ▲
▼
Hallo zusammen!!

Ich habe hier im Forum schon ein paar Dinge dazu gelesen, aber mir ist 
immer noch nicht ganz klar, wozu man fdevopen() verwendet.

Ich habe z.B. folgenden Code:
1
extern  void  USART_Init ()
2
{
3
  ...
4
  fdevopen(USART_TxChar, 0);
5
  USART_TxString("USART OK\n\r");
6
}
7

8
static  int  USART_TxChar (
9
    char   data,         /*FPI ein Charakter              */
10
    FILE   *dummy)        
11
{
12
  /*FA Wait for empty transmit buffer */
13
  while ( !( UCSR1A & (1<<UDRE1)) );
14
  /*FA Put data into buffer, sends the data */
15
  UDR1 = data;
16
  return 0;
17
}
18

19
extern  void  USART_TxString (
20
    char   *string)      /*FPI String                */    
21
{
22
    /*FA so lange *string != '\0' also ungleich dem "String-Endezeichen" */
23
  while (*string)
24
    {   
25
        USART_TxChar(*string, 0);
26
        string++;    
27
    }
28
}

Was macht denn jetzt dieses fdevopen()? Brauche ich das überhaupt?

Danke für Eure Antworten
Gruss
Patrick
Persönliche Seite #1023541
Lesenswert?
• ▲
▼
fdevopen() verknüpft eine von dir gelieferte, primitive Zeichen-Ein- 
oder Ausgabe-Funktion mit den Ein- oder Ausgabestreams der C-Library.

Mit einer solchen Verknüpfung gehen dann z.B. Schreiboperationen mit 
printf, die von der C-Library aus ja auf den Ausgabestream STDOUT gehen, 
durch deine Funktion durch, im obigen Fall also durch die serielle 
Schnittstelle UART.

Du brauchst das nicht. Es kann aber nützlich sein, das zu benutzen, wenn 
du z.B. die komfortablen Formatiermöglichkeiten eines printf magst und 
dein (ein fremdes) Programm mit gängigen C-Funktionen schreiben willst, 
statt überall eigene Funktionen zu benutzen.

Wenn du z.B. printf benutzen willst, um auf ein LCD was auszugeben, 
kannst du mit fdevopen an einer Stelle eine entsprechende 
LCD-Ausgabefunktion einbinden und brauchst nicht überall wo eine Ausgabe 
gemacht wird UART auf LCD umzuschreiben.

Mehr Infos hier:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#gb599ddf60819df4cc993c724a83cb1a4

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.