Forum: Compiler & IDEs AVR32 Studio, GNU Toolchain Probleme: fdevopen


von Andreas (Gast)


Lesenswert?

Hallo allerseits,

arbeite seit kurzem auf einem EVK1100 und portiere Code eines AT90USB.
Ich verwende das AVR32 Studio mit GNU Toolchain (alles von 
Atmel-Homepage downgeloadet).
Bei der Portierung ist mir jetzt aufgefallen, dass in stdio.h die 
Funktion fdevopen(..) nicht vorhanden ist!!??

Standardmaessig ist diese Funktion jedoch in frueheren Versionen von 
avr-libc vorhanden und in der selben Version wie sie von ATMEL 
downgeloadet werden kann ist die Funktion urspruenglich vorhanden.

Hat jemand selbiges Problem und wie koennte man das loesen?
Das Builden von aktuellen Source hab ich bisher noch vermieden, da es 
mich wundern wuerde, wenn ATMEL eine Toolchain anbietet, die 
grundlegende Funktionen nicht anbietet.

lg, Andreas

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

fdevopen() gehört zur avr-libc für die 8-bit-AVRs.  Diese haben kein
zu Grunde liegendes Betriebssystem und daher auch kein Dateisystem,
daher emuliert fdevopen() in etwa die Funktionalität von fopen() für
die Kommunikation mit der Peripherie des Controllers.

Mit AVR32 kenne ich mich nicht so recht aus.  Die AP7000 laufen ja
mit einem Betriebssystem, da sollte dann normal fopen() unterstützt
werden.  Die UC3 sind eher eine Kategorie kleiner, da musst du mal
die Doku wälzen, ob und wie dort stdio unterstützt wird.  Die avr-libc
ist jedoch dafür nicht da, meines Wissens benutzt die Toolchain dort
die sogenannte "newlib".

von Andreas (Gast)


Lesenswert?

Hallo

leider gibt es bei der newlib kein fdevopen.

Ich hab zwar im Netz schon gesehen bzgl. der Umleitung von stdio auf 
uart, jedoch kann ich mir nicht genau erklaeren wie dies funktionieren 
soll.
Dabei werden _read und _write Funktionen ueberschrieben und dadurch wird 
lt. diesem Forum bei printf die Fkt. _write aufgerufen.

Es gibt bei dem verfuegbarene SW Framework unter dem CDC Virtual COM 
Example eine Umleitung von printf auf COM1, jedoch ist dies wiederum 
eine Eigenheit, da es sich hier um eine Art Debug-Ausgabe handelt.

Ich will eine Umleitung des FileStreams (lesen mit fgetc und schreiben 
mit fputc) auf USART ueber USB. Kommunikation ueber USB laeuft, nur die 
Umleitung funktioniert eben nicht so wie ich mir das vorstelle.

Bei dem 8-Bit AVR hat das ganze wie folget ausgesehe:

//stream I/O wrapper functions
int strm_putc(char c,FILE *s)
{
  uart_putc(c);
  uart_usb_putchar(c);
  return 0;
}

int strm_getc(FILE *s)
{
  for(;;)
  {
    if(!uart_is_rx_empty())
      return (unsigned char)uart_getc();
    if(uart_usb_test_hit())
      return (unsigned char)uart_usb_getchar();
  }
}



Ich hoffe es kann mir jemand weiterhelfen.

lg, Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.