AVR32 stdout umleiten seltsames verhalten

OP #2007971
Lesenswert?
• ▲
▼
Hallo,

ich nutze einen AVR32 und leite die stdout folgendermaßen um.

// rederict stdout
int _write(int file,char *ptr,int len)
{
 int i;
 for(i=0;i<len;i++)
 {
  uart1_putc(*ptr++);
 }
 return len;
}

Nachdem ich aber das mache kann der JTAG Debugger den AVR32 nicht 
richtig resetten. Ich muss immer einen manuellen Reset Hardwaremäßig 
machen damit der Prozessor neu startet. Warum ist das so?
Hat das noch jemand so?

Weiterhin funktioniert printf nur wenn
ich am Ende ein \n einfüge etwas so:
printf("Ergebniss =%2.5f\r\n",z);

Bei
printf("Ergebniss =%2.5f\r",z); geht printf nicht.


Warum? Weis dies jemand?

Hat jemand damit schon mal Erfahrung gemacht?
#2008239
Lesenswert?
• ▲
▼
Jens A. schrieb:

> Weiterhin funktioniert printf nur wenn
> ich am Ende ein \n einfüge etwas so:
> printf("Ergebniss =%2.5f\r\n",z);
>
> Bei
> printf("Ergebniss =%2.5f\r",z); geht printf nicht.
>
>
> Warum? Weis dies jemand?

Zum JTAG kann ich nichts sagen.
Aber zu \n
Es ist nicht ungewöhnlich, dass Ausgabebibliotheken die Ausgabe 
zwischenpuffern und erst dann, wenn sie einen \n sehen, die komplette 
Ausgabe die Pipeline runterschicken in der sie dann zum Gerät 
transferiert werden.
Entweder mann kann dann dieses Buffering abschalten oder aber man zwingt 
die Ausgabelib mittels einem flush dazu, die Ausgabepuffer auszuleeren, 
selbst dann wenn noch kein \n gesehen wurde.
OP #2008327
Lesenswert?
• ▲
▼
@Karl heinz Buchegger

Ja mit dem Buffer erst nach \n leeren habe ich auch schon irgendwie
in Google finden können.
Aber im C Standard ist das aber nicht so, oder?
Weiterhin würde das ja bedeuten das ich mit printf
über die RS232 niemals eine alte Zeile wieder überschreiben kann,
da ja durch \r\n immer ein neue Zeile angefangen wird.

Laut C Büchern gibt es auch eine Funktion fflush()
aber ich habe keine Ahnung wir das mit der newlib ist.


Wo gibt es eigentlich Literatur oder Internetseiten wo man
sich das eigentlich mal genaustens anlesen kann.
Wie das alles mit dem stdout oder FILESTREAM funktioniert.
#2008383
Lesenswert?
• ▲
▼
Jens A. schrieb:
> @Karl heinz Buchegger
>
> Ja mit dem Buffer erst nach \n leeren habe ich auch schon irgendwie
> in Google finden können.
> Aber im C Standard ist das aber nicht so, oder?

Doch. Für File Streams sind die Modi "unbuffered", "fully buffered" und 
"line buffered" definiert. "line buffered" ist das, was man 
üblicherweise bei stdout antrifft.

> Weiterhin würde das ja bedeuten das ich mit printf
> über die RS232 niemals eine alte Zeile wieder überschreiben kann,
> da ja durch \r\n immer ein neue Zeile angefangen wird.

Doch. Du kannst jederzeit ein fflush(stdout) machen.

> Laut C Büchern gibt es auch eine Funktion fflush()
> aber ich habe keine Ahnung wir das mit der newlib ist.

Da das eine ziemlich grundlegende Funktion ist, gibt es die da sicher 
auch.

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.