Forum: Mikrocontroller und Digitale Elektronik Printf auf eigen putchar Funktion umleiten


von Julius Krebs (Gast)


Lesenswert?

Bis jetzt habe ich oben genannte Problemstellung wie folgt realisiert:

int uart_putchar (char c)
{
  if (c == '\n')
    uart_putchar('\r');
  //Warten solange bis Zeichen gesendet wurde
  loop_until_bit_is_set(USR, UDRE);
  UDR = c;
  return (0);
}

int main (void)
{

  //Initzialisierung der seriellen Schnittstelle
  IOInit();
  //öffnet einen kanal für printf
        fdevopen (uart_putchar, NULL, 0);

        //Ausgabe
        printf("Test");
}

Leider wird nun (ich habe die neuste Version des GCC installiert), bei
der Funktion fdevopen eine Fehlermeldung ausgegeben.

Daher meine Frage: Was muss geändert werden, damit ich die Funktion
uart_putchar weiterhin in Zusammenhang mit printf benutzen kann?

Gruß
Julius

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

.

   Leider wird nun (ich habe die neuste Version des GCC
   installiert), bei der Funktion fdevopen eine Fehlermeldung
   ausgegeben.


Ach.



























Bis hier sollte Dir eigentlich klargeworden sein, daß Dir am ehesten
geholfen werden kann, wenn Du diese Fehlermeldung hier auch wiedergibst
...

von Simon Küppers (Gast)


Lesenswert?

guck dir snprintf an

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das wäre für ihn zwar vermutlich auch eine Lösung, aber er sollte erst
mal lernen, Fehlermeldungen als das wahrzunehmen, was sie sind: eine
Hilfe, den Fehler zu finden ...

von Christian (Gast)


Lesenswert?

Wenn Du einfach mal die Dokumentation zu fdevopen lesen würdest (dafür
ist sie ja da), dann würdest Du erfahren, dass sich die Definition für
die put-Funktion geändert hat. Das Lesen der dazugehörigen "Note"
überlasse ich mal Dir:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#ga40

von Christian (Gast)


Lesenswert?

Hmpf, URLs mit Unterstrichen werden hier ja nicht korrekt übernommen.
Also: http://tinyurl.com/eqn7e

von Lupin (Gast)


Lesenswert?

Soviel freundlichkeit ist man hier ja gar nicht gewöhnt...

von arsh0r (Gast)


Lesenswert?

hatte das gleiche problem:
...
int uart_putchar (char c, FILE *file)
...
fdevopen (uart_putchar, NULL);
...

funzt

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.