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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren