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
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...
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.