Hallo, habe folgendes Problem: Möchte Daten auf dem LCD-Display (4X16)ausgeben. Integer und Text kein Problem, aber mit float, double und long habe ich Probleme. Im Programm selbst wird mit float gerechnet, aber die Ausgabe finkt. nicht. Vermutlich liegt dies am Display. Verwende den SDCC-Compiler und das Board von Dr.Rakers mit dem Infinion C517A. Source: #include <float.h> float f1; chr str1[16]; sprintf (str1,"xyz %3.2f",f1); dstrout (0,str1); Anzeige: <NO FLOAT> Diese Nachricht kommt auch bei double. Bei long wird nichts angezeigt. Formatstring natürlich angepasst bei verschiedenen Typen. Habe gesucht ob es eine Routine zum konvertieren gibt (ftoa). Vielen Dank Gruß Fredi Nüßle
Such im Makefile mal nach PRINTF_LIB und ergänz die Zeile zu: PRINTF_LIB = $(PRINTF_LIB_FLOAT) Nur dann kennt printf Formatbefehle für Fließkommazahlen.
Argh, bitte meinen obigen Beitrag ignorieren. Hab gelesen dass du GCC nimmst.
Hallo, habe nochmals bei SDCC nachgeschaut. Leider gibt es noch keine Ausgabe-Routine für Float. (z.B. ftoa, dtostr, dtostrf oder ähnliches). Ich kann mir nur damit behelfen indem ich den Vor- Nachkommaanteil in integer oder char ausgebe. Hat jemand schon mal so etwas programmiert??? Wäre dankbar wenn mir da jemand helfen könnte, da ich noch Anfänger und total auf mich alleine gestellt bin. Gruß Fredi
Wo ist das Problem? Wenn du bspw. 2 Kommastellen haben willst, dann multipliziert die float-Zahl mit 100. Dann fürst du bspw. itoa (...) aus. Bei der Ausgabe fügst du einfach vor den letzten beiden Zeichen (Zahlen) ein Komma per Software ein.
Versuche es mal so: #include <stdlib.h> void StringDisplay(char *str) // Ausgabe von Zeichenketten { while(*str!=0) // solange String-Ende(0) noch nicht erreicht, { Befehl(*str); str++; } startwert=counter_buchstabe+startwert; } void FloatDisplay(double x,int vk, int nk) //Ausgabe einer Kommazahl über die String-Ausgabe { char buffer[20]; StringDisplay(dtostrf(x, vk, nk, buffer)); // vk Vorkommastellen, nk Nachkommastellen } Wenn Du nun die Funktion FloatDisplay aufrufst mit der Übergabe einer Zahl oder Variablen sowie der Vor und Nachkommastellen FloatDisplay(XYZ,VK,NK); dann sollte das klappen...bei mir klappt es mit jedem Display. Für Verbesserungsvorschläge bin ich natürlich zu haben :-) Marco
Nachtrag: die zeile: startwert=counter_buchstabe+startwert; muss raus... die gehört noch zu meiner Cursorpositionierung... die ja hier keine Rolle Spielte :-)
Danke Alexander, Marco für eure Hilfe. Marco deinen Vorschlag kann ich nicht nehmen da mir die Funktion dtostrf vom sdcc.compiler nicht geboten wird. Trotzdem Danke. Werde den Vorschlag von Alexander mal versuchen. Klingt sehr einfach. Nur ist mir noch nicht klar wie ich die Berechnung in Float auf eine bestimmte Anzahl von Nachkommastellen begrenzen kann. Aber ich werde es versuchen, kann ja nur dabei lernen. Werde mich da einlesen. Bestimmt ist es ganz einfach. Gruß Fredi
Gern geschehen. Die Funktion dtostrf ist doch meiner Meinung nach in der stdlib.h und wenn man die einbindet sollte doch jeder Compiler das verstehen ??? Oder nicht? Marco
Hallo Marco, habe ich auch immer gedacht. Aber in der stdlib.h vom SDCC ist diese Funktion nicht enthalten. Würde mir die ganze Sache viel einfacher machen. *********************************** #ifndef __SDC51_STDLIB_H #define __SDC51_STDLIB_H 1 #ifndef NULL # define NULL (void *)0 #endif #include <malloc.h> extern float atof (char *); extern int atoi (char *); extern long atol (char *); extern void _uitoa(unsigned int, char*, unsigned char); extern void _itoa(unsigned int, char*, unsigned char); extern void _ultoa(unsigned long, char*, unsigned char); extern void _ltoa(unsigned long, char*, unsigned char); #endif ***************************************** Das ist alles was in der stdlib.h steht!!! Fredi
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.