Forum: Mikrocontroller und Digitale Elektronik Bug in printf und codesourcery for ARM


von Karl Z. (griffin27)


Lesenswert?

Grüß Euch,

ich habe glaub ich einen Bug beim printf() entdeckt.

Wenn ich mit
printf("Hallo\n");
diesen Text über die Serielle an den PC sende, kommt das \n-zeichen 
nicht an.

printf("%s Hallo\n", "dummyString");
Erst wenn irgendein parameter dem Formatstring im printf() übergeben 
wird, so wird auch das abschließende \n mitgesendet.

Somit funktioniert auch folgendes richtig:
printf("Hallo%c",'\n');

Hat diesen Fehler schon mal jemand entdeckt?

Ich verwende "codesourcery-codebench-lite-2011.09-69-arm-eabi".

Das problem tritt dabei unabhängig davon auf, ob das Programm auf Linux 
oder Windows kompiliert wurde.

lg, Karl

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


Lesenswert?

Karl Zeilhofer schrieb:
> Wenn ich mit
> printf("Hallo\n");
> diesen Text über die Serielle an den PC sende, kommt das \n-zeichen
> nicht an.

Obiges wird der Compiler vermutlich durch puts("Hallo") ersetzen.
Vielleicht steckt der Bug ja in puts()?

von Karl Z. (griffin27)


Lesenswert?

ich hab jetzt mal puts() gecheckt, und finde dort nichts ungewöhnliches.
Das seltsame ist ja, dass nur das letzte \n geschluckt wird. eines 
mitten im String funktioniert. doppeltes \n am ende geht auch.
bin ratlos.

von Rene (Gast)


Lesenswert?

Check mal, was der Preprozessor aus deinem Code gemacht hat.

von Karl Z. (griffin27)


Lesenswert?

wir haben das nun nochmals überdacht. ich hatte zuvor deine antwort 
nicht richtig interpretiert.
mein kollege hat nun den bug in der stdio.c von Atmel behoben.
dort wird in der puts() wird fputs() ohne hinzufügen eines \n 
aufgerufen!
Es handelt sich um die at91lib Version 1.5!

Vielen Dank für deinen Hinweis!

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


Lesenswert?

Karl Zeilhofer schrieb:
> Es handelt sich um die at91lib Version 1.5!

Dann solltet ihr wohl auch noch Atmel darüber berichten.  Ist mir
allerdings unklar, warum die überhaupt an stdio rumfummeln.  Ist
das von der newlib so schlecht?

> dort wird in der puts() wird fputs() ohne hinzufügen eines \n
> aufgerufen!

In so eine Richtung ging meine Vermutung schon, nachdem ich über
die Effekte nachgedacht hatte.  Ich wusste allerdings aus der
Vergangenheit (als ich das stdio für die avr-libc entworfen habe),
dass der Compiler rigoros ein printf("...\n") durch puts("...")
ersetzt.

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.