mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sprintf merkwürdiges Verhalten


Autor: Guile Lampert (sphinx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liebes Forum,
ich habe gerade meinen Bootloader fertig geschrieben.
Das Ganze funktioniert auch wunderbar, allerdings habe ich ein Problem 
mit sprintf bekommen.

Wenn ich meine Anwendung per AVR Studio auf den ATmega2560 (IAR 
Compiler) brenne, läuft sie einwandfrei. Wenn ich meinen Bootloader 
verwende, formatiert sprintf einen string in der Anwendung falsch.

Diese Anweisung: sprintf(stringTestAusgabe, "%2d/%2d", 10, 20);

Gibt folgenden String aus: FF/FF

Und sollte ja eigentlich: 10/20 ausgeben.

Alles andere funtkioniert einwandfrei. Hat vieleicht jemand ähnliches 
erlebt bzw. eine Idee was falsch sein könnte? Ich kann die Anwendung ja 
leider nur in Assembler debuggen wenn ich sie mit dem Bootloader auf den 
uC schiebe.

Vielen Dank im voraus
Grus Jan

Autor: Cosi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du "stringTestAusgabe" auch als ein char-Array deklariert. Also 
z.B.
char stringTestAusgabe[2];
?

Autor: Cosi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In deinem Fall natürlich mit mind. 6 Zeichen :) Also
char stringTestAusgabe[6];

Autor: Guile Lampert (sphinx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jawohl es ist sogar ein char array der Größe 20!!! :)

Eins muss ich noch korrigieren:
Der String der ausgegeben wird ist XX/XX wobei X für 0xff stehen soll.

Autor: Cosi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuche etwas Abstand im Code zu lassen:
sprintf(stringTestAusgabe, "%2d / %2d", 10, 20);

Und wenns dann noch immer net geht, ohne "/":
sprintf(stringTestAusgabe, "%2d Test %2d", 10, 20);

Autor: Guile Lampert (sphinx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Cosi,
danke für Deine Hilfe!
Das hat leider nichts gebracht. Auch wenn ich Abstand einfüge.
Das komische ist ja, daß das Ganze funktioniert wenn ich die Anwendung 
direkt  via AVR Studio draufbrenne.

Ich fürchte, der Fehler liegt irgendwo tiefer und das kaputte sprintf 
ist eine Nebenwirkung. :(

Autor: Cosi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok...
Du, im avr gcc gibt es bereits Funktionen die dir Konvertieren:
int --> string
und
float --> string

Autor: Guile Lampert (sphinx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yipp danke Dir aber ich würde gerne die Ursache finden.
Nicht das da etwas schlimmeres hintersteckt.

Wär ja peinlich wenn der uC plötzlich völlig durchdreht ;) hehe

Autor: Guile Lampert (sphinx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist gelöst!

Es handelte sich um einen Fehler im IAR Compiler, der durch Installation 
der neusten Version behoben wurde.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.