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?
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.
@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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.