Probleme mit sprintf

Gast #177323
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
Angehängte Dateien:
Gast #177324
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...
Gast #177325
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
Gast #177326
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.
Gast #177327
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
Gast #177328
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren