Servus Leute, ich habe ein kleines Problem mit meinem CVAVR C-Compiler. Wenn ich int in char umwandeln möchte und dieses dann auch auf einem LCD anzeigen möchte, so ist dies kein Problem (itoa befehl). Nun möchte ich aber float in char umwandeln und anzeigen lassen (ftoa-befehl). Dies funktioniert jedoch nicht. Auch die Ausgabe ans Terminal funktioniert nicht. Jedoch kann ich z.B. intern mit dem float-wert rechnen, musss ihn dann in int umwandeln und kann ihn dann anzeigen. Wer kennt dieses Problem bzw. dessen Lösung. P.s.: ich arbeite mit dem stk500 mit ATmega8535 Prozessor und wie oben beschrieben mit der CodeVision-Software. Vielen Dank schon im voraus für eure Hilfe
"Nun möchte ich aber float in char umwandeln und anzeigen lassen (ftoa-befehl)." So weit, so gut. "Dies funktioniert jedoch nicht." Was heisst das? "Auch die Ausgabe ans Terminal funktioniert nicht." Auch hier: Was heisst das? "Funktioniert nicht" ist die präziseste aller möglichen Fehlerbeschreibungen. Da weiß jeder sofort ganz genau, was schief geht. Übrigens hast Du Dir den falschesten aller Foren-Bereiche für Deinen Beitrag ausgesucht.
"Nun möchte ich aber float in char umwandeln und anzeigen lassen (ftoa-befehl)." So weit, so gut. "Dies funktioniert jedoch nicht." Soll heißen: keine Ausgabe auf dem LC-Display "Auch die Ausgabe ans Terminal funktioniert nicht." Auch hier: Es kommt nichts am Terminal an "Übrigens hast Du Dir den falschesten aller Foren-Bereiche für Deinen Beitrag ausgesucht." Wo soll ich denn bitteschön mein Posting hinschicken ?
Fangen wir mit der letzten Frage an: http://www.mikrocontroller.net/forum/list-2-1.html oder allgemeiner http://www.mikrocontroller.net/forum/list-1-1.html Dieser Forenbereich scheint jedenfalls eher für administrative Hinweise, Verbesserungsvorschläge und ähnliches vorgesehen zu sein; mehr darüber weiß sicherlich Andreas, der sich das ganze ja ausgedacht hat. ftoa gibt nirgendwohin was aus, weder auf LC-Displays noch auf Terminals, ftoa beschreibt lediglich einen zur Verfügung zu stellenden Speicherbereich mit einigen Bytes Text. Soweit ist das Verhalten also -vermutlich- völlig korrekt. Du könntest beispielsweise mal ein Quellcodefragment posten, nämlich wie exakt Du ftoa aufrufst und wie die beteiligten Variablen definiert sind, Du könntest aber auch einfach mal im Debugger nachsehen, was genau passiert.
Sehr geehrter Herr Oberschlau, natürlich wandelt der Befehl ftoa nur um und gibt nichts auf dem LCD aus; das ist mir völlig klar. Der Quellcode sieht dann in etwa wie folgt aus: char *string; float abc=23.45; ftoa(abc,2,string); lcd_puts(string); P.s.: Bitte nur Antworten auf mein Problem und keine dumme, primitiven Anmachen.
Das kann so nicht funktionieren: char *string; float abc=23.45; ftoa(abc,2,string); lcd_puts(string); string ist ein nicht initialisierter char-Pointer. ftoa erwartet als drittes Argument einen Pointer, der auf einen beschreibbaren Speicherbereich verweist. Versuch' mal: char string[10]; float abc=23.45; ftoa(abc,2,string); lcd_puts(string); oder meinetwegen char buffer[10]; char *string; float abc=23.45; string = buffer; ftoa(abc,2,string); lcd_puts(string); Mir ist allerdings nicht ganz klar, warum ich Dir überhaupt helfe - da Du ja bereits recht zurückhaltend formulierte Fragen als dumme Anmache ansiehst. Statt mich einen Herrn Oberschlau zu titulieren, lies' Dir einfach mal ein Buch* über C durch: Kernighan & Ritchie, Programmieren in C, zweite Auflage, Hanser Verlag *) Textbaustein. Und vielleicht doch ins Wiki?
Mahlzeit, die gute Nachricht zuerst: es funktioniert; ich kann jetzt float in char umwandeln und anzeigen lassen. @Rufus: Vielen Dank für die Hilfe. Wenn ich dich als Herr Oberschlau tituliert habe, dann lag dass vielleicht auch an deiner Art posting zu beantworten (vor allem, dass der ftoa Befehl nichts ans LCD ausgibt, *) Textbaustein). Soll heißen, ich lass mich nicht gerne als Vollidiot denunzieren. Trotzdem möchte ich mich formal entschuldigen. P.s.: Ich habe mir jetzt die Vollversion von CodeVisionAVR zugelegt sowie das Buch "AVR-Risc Mikrocontroller" von Wolfgang Trampert. Ein Nachschlagewerk für C besitze ich bereits.
@Christian versuch auch mal die <math.h> zu includen ... @Rufus T. Firefly Bitte nicht bös nehmen - verweis doch auf die Buchtipps (ist einfach kürzer) Ich habs seither nicht gesehen Gruss und lasst euch nicht ärgern
@Christian: Ein Missverständnis. Die Fußnote sollte nicht erklären, was ein Buch ist (das nicht zu wissen unterstelle ich nur seltenst), sondern bezog sich darauf, daß ich genau dieses Buch in den letzten Tagen häufiger Leuten zur Literatur nahegelegt habe und daher die Literaturangabe ein Textbaustein sein soll. Ein Buch, das ein Textbaustein ist, kommt aus dem Data Becker-Verlag ... (das ist eine Form von Literaturkritik) Zu meine Aussage, daß ftoa nichts auf LC-Displays oder Terminals ausgibt, stehe ich allerdings nach wie vor. Du hättest Dir das Leben vereinfachen können, indem Du geschrieben hättest, daß ftoa den übergebenen String nicht mit Inhalt füllt ... (Wobei, je nach -zufälliger- Adresse können auch die spannendsten Nebeneffekte auftreten, dank des memory-mapped I/O der AVRs kann man auf diese Art und Weise auch Peripheriezugriffe durchführen). Immerhin: Dir wurde geholfen.
ein kurzer Nachtrag. 1. Bisweilen vermisse ich in diesem Forum den Versuch, sich in das Problem des Threadautors hineinzuversetzen. Dann werden schnell die Glaskugeln ... bemüht, was 2. schnell zum Verlust er guten Sitten führt. Uns allen Stünde etwas mehr Toleranz und etwas weniger Hochmut und Arroganz ganz gut an. Ich denke dann hätten wir alle mehr von diesem Forum.
Hallo Alle ich möchte ebenfalls eine Floatzahl in einen String umwandeln, aber mein avrgcc (winavr20040720) kennt die Funktion ftoa nicht. math.h und stdlib.h sind inkludiert. Muss man die Funktion erst noch selbst definieren?? Danke für die Hilfe im Voraus René
Dann such doch mal in allen Dateien im include-Verzeichnis nach dem Funktionsnamen: findstr "ftoa" include\*.h
Hallo Rufus Wir haben stdlib und math durchgeschaut und dort steht sie nicht drin. Hast Du sie denn? Danke René
leider stehe ich gerade heute vior dem seben problem wie dikuh orm neuuen tor, und kriegs auch nicht in die birne ein funtionierender codeschnipsel und ich raffs villeicht insbesondere weis ich nicht was soll mir die "2" als 2.parameter bedeuten. Und muss der zeger auf ddas char array tatschlich selbst ein char arraydarstellen oder einen pointer im integerformat? kopfkratze und grüble.
Sorry ich komme heute auch mit meiner tastatur nicht klar (tevion drathlos)
@winne Die 2 gibt an wieviel Nachkommastellen umgewandelt bzw. berechnet werden. Ansonsten nimm den Code der weiter oben gepostet wurde. Gruß Bob
Hab ich gemacht. Und prompt ist der Code 1123 worte lang geworden: Essig. Beim 2313 ist bei 1024*16bit Ritze. Jetzt heisst es reduzieren ohne am prog abstriche zu machen. danke trotzdem.
Tjo, ist wohl die float Implementation schuld. Gehts nicht mit normalem Integer? (itoa)
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.