Hallo C-Gemeinde, Mein Hilferuf gehört nicht ganz in dieses Forum. Ich habe ein Problem mit meinem C-Programm, geschrieben mit dem ICC-AVR-Compiler. Da hier aber die fähigsten C-Programmieren für AVR zu Hause sind, versuche ich hier mein Glück. Ich brauche eine Funktion die float nach ascii wandelt. Die interne ftoa-Funktion vom ICC-AVR ist für mich nicht brauchbar. Wenn ich mehr Ahnung von 'C' hätte würde ich mir selber eine schreiben. Die Funktion soll so aussehen: my_ftoa( float_variable, ascii_variablevariable, stellen_hinter_komma) float_variable: hier liegt mein float ascii_variable: hier soll der ascii-Wert abgelegt werden stellen_hinter_dem_komma: hier wird ein Wert von 0 bis 6 angegeben. Der ascii_Wert muß mit 0x00 abgeschlossen werden. Meine Frage: Wer verfügt über eine solche Funktion, bzw. wer kann mir eine solche Fuktion schreiben? Da das Projekt kommerziell genutzt werden soll bin ich natürlich bereit den Author dieser Funktion finanziell zu entlohnen. Vielen Dank my_ftoa
Hast du die funktion sprintf() zur Verfügung? Mit der ist es kein Problem: sprintf(buffer,"%6.3f",f) schreibt z.B. das Format 12.345. Mit der avr-libc ist das z.B. möglich.
Hallo Fritz, meine jetzige Variante läuft mit printf. Dieses printf hat jedoch einen Schönheitsfehler: Es rundet die Nachkommastellen ab. Z.B, der float-Wert 12,459789 wird, bei 3-stelliger Genauigkeit, nicht mit 12,459 ausgegeben, sondern mit 12,46. Ich weiß, das z.B.die Compiler CodeVision und Keil-C166 soetwas nicht machen. Die Ausgabe auf den Display macht ein nervöses Bild wenn sich die Stellenzahl ändert. Schönen Gruß my_ftoa
Old Bug: Dieser Effekt tritt bei allen Genauigkeitswerten, also von 0 bis 6, auf. Irgendwann wird immer gerundet und abgeschnitten. Gruß my_float
Ich benutze das hier: http://www.mikrocontroller.net/forum/read-4-46127.html Die Stellenzahl kannst Du natürlich auch als Variable mit übergeben. Peter
Ich benutze ebenfalls ICC Compiler in der 45 Tage Testversion ich habe ein Problem bei der Formatierung: int printf(char *fmt, ..) %[flags]*[width][.precision][l]<conversion character> %d - prints the next argument as a decimal integer %f - prints the next argument as a floating point number in decimal <aaa>.<bbbb> format Hat jemand Beispiele der verschiedenen printf oder sprintf Formatierung? Bei mir funktioniert nur sprintf(string, "%d",value); Bei %f gibt die Funktion einen String aus "Integer..." Ich denke evtl. den AVRGCC auszuprobieren, aber der ist nicht so komfortabel. Danke
Hmm, RTFM würde ich vermuten. Viele Microcontroller-Compiler (AVR-GCC/avr-libc ebenfalls) implementieren standardmäßig keine Gleitkomma-Darstellung in der printf-Familie, weil diese den Code unmäßig aufbläht. Da printf erst zur Laufzeit feststellt, was wirklich gebraucht wird, müßten alle Applikationen diesen Ballast mitschleppen. Daher ist Gleitkommadarstellung sehr oft eine wählbare Option. Möglicherweise hast Du diese einfach nicht ausgewählt. Ansonsten hilft Dir jedes gute C-Lehrbuch bzw. jeder C-Compiler für Standardcomputer, den Koloß von printf besser zu verstehen. Das ist nicht in drei Minuten aufgeschrieben.
bei printf("%f", f) muss f ein flieskomma variable sein, oder ein Fliesskomma Ergebnis. Richtig: double f; int i; printf("%f",f); printf("%f",i/2.0); falsch: int i; printf("%f",i); printf("%f",i/2);
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.