Forum: Compiler & IDEs Probleme mit sprintf


von Fritz Wüst (Gast)


Angehängte Dateien:

Lesenswert?

Liebe AVR-GCC Freunde

Ich arbeite das erste mal mit dem AVR-GCC. Mit meinem
Versuchsprogramm möchte ich einen uint8_t Wert in drei
ASCII-Zeichen umwandeln.

Lokaler Setup ist:
AVR-GCC   : Version 3.3.1
Plattform : STK200
Kontroller: AT90S8515

Meine Source wird ohne Fehlermeldungen kompiliert. Das
Problem ist nun, dass im ASCII-Buffer nicht die erwarteten
Zeichen abgelegt werden, sondern alles 0xFF (255).
Mein Frage ist, was mache ich falsch?

Code: Datei conv-u8-asc.c

Für eine eventuelle Hilfe bin ich Euch dankbar.
Gruss wuf

von Jörg Wunsch (Gast)


Lesenswert?

Du simulierst mit einer alten Version von AVR Studio und benutzt einen
alten Compiler, statt alles mit aktuellen Versionen und wenigstens mal
am richtigen AVR auszuprobieren.  Dort würde nämlich alles
funktionieren...

von Fritz Wüst (Gast)


Lesenswert?

Hallo Jörg

Besten Dank für Deine Antwort. Habe vergessen zu erwähnen,
dass ich unter SuSE-Linux arbeite. Versuche meine zukünftigen
AVR-Projekte ganzheitlich auf dieser OS-Plattform zu entwickeln.
So viel ich weiss gibt es für Linux kein AVR-Studio. Ich teste
meine AVR-Programme direkt auf dem STK200 bzw. STK500 live aus.
Pionierhaft wie zu alten Zeiten sehr Hardwarenahe. Habe den LCD-
Treiber von Peter Fleury zusammen mit einem 4*20 LCD-Display
bei meinem jetztigen Setup problemlos zum laufen gebracht. Meine
weiteren Schritte sind nun den LCD mit Messwerten zu füttern.
Wie Du ja weisst geht dies nur mit über die Umwandlung der Daten
in ASCII-Characters.

Da bin ich auf die Funktion sprintf (ein Haufen von Code) ge-
stossen um diese Arbeit ein bisschen zu erleichtern. Aber es
mir bis jetzt noch nicht gelungen diesen Berg von Code zu einer
korrekten Arbeit zu animieren, auch nicht mit Hilfe der goldenen
Regeln von Kernighan & Ritchie Hi.

Meinst Du wirklich ich habe einen uralten AVR-GCC um diesen Job
zu erledigen. Ich lade jetzt eine neuere Version 3.3.4 runter,
mit der Hoffnung mehr Erfolg zu haben. Den Effekt mit der Ablage
von 0xFF's in einem Array hatte ich schon mit anderen kleineren
Programmen festgestellt.

OK Jörg besten Dank für Deine Tipps! Ich werden weiter forschen
bis es geht.

Gruss wuf

von Jörg Wunsch (Gast)


Lesenswert?

Dann ist es seltsam.

Die Antwort von mir beruhte darauf, daß Du keine weiteren Infos zur
Umgebung geliefert hast und daß AVR Studio früher die
Initialisierungsdaten für statische Initialisierungen nicht mit
eingelesen hat, so daß sie stattdessen leeren ROM simuliert haben, wo
eigentlich im Hex-File Daten stehen.  Der Format-String ist letztlich
nichts anderes als eine initialisierte Variable.

Ansonsten: tritt outp() in die Tonne.  Schreibe DDRB = 0xff; usw.  Ich
bin mir ohnehin nicht aus dem Hut sicher, welche Version von outb
und/oder outp es war/ist, die diese Linux-Anomalie mit den
uneinleuchtend vertauschten Parametern (erst der Wert, dann die
Adresse) benutzt (hat), die Du hier verwendest.  Da sowohl outb als
auch outp deprecated sind (und in der aktuellen CVS-Version der
avr-libc nicht mehr existieren), hau wech.

von Fritz Wüst (Gast)


Lesenswert?

Hallo Jörg

Ich habe mich entschlossen folgende Funktionen aus
der stdlib für mein Projekt zu verwenden. Sie funk-
tionieren bestens und sind keine memory-muncher:

itoa
ltoa
utoa
ultoa
dtostre
dtostrf

Bei den letzten zwei Funktionen muss für den Link-
prozess noch die Bibliothek libm.a mitgelinkt werden

OK Jörg! Danke noch für Deine nützlichen Anregungen.

Gruss wuf

von Jörg Wunsch (Gast)


Lesenswert?

Sie sind halt in der Formatierung nur nicht ganz so flexibel, ist eben
eher die ,,Billigvariante'', besonders zu empfehlen, wenn man mit
ROM
knapp ist.  Die printf-Familie ist universell aber teuer.

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.