mikrocontroller.net

Forum: Compiler & IDEs Probleme mit sprintf


Autor: Fritz Wüst (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Fritz Wüst (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fritz Wüst (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.