Forum: Compiler & IDEs SDCC: Problem mit "float-wert"


von Juergen B. (jbaben)


Lesenswert?

Hallo,
bei dem Compiler SDCC habe ich ein Problem mit der Anzeige von 
"float-Werten" bei der Programmierung (Anzeige auf LCD) des MC 
AT89C51RC2 (8051).
1
float value = 10.00;
2
unsigned int n = sprintf(char buffer[20],"Umfang = %5.2f m",value)
3
lcd_sendstring(buffer);  // Ausgabe Wert Umfang

Der float-Wert value soll als String auf dem LCD ausgeben werden.
Die Anzeige ist aber nicht  "10.00" sondern "NO FLOAT"
Ich habe gelesen das die float-Funktion durch SDCC nicht unterstützt 
wird.
Wie aber kann ich dann einen float-Wert darstellen bzw. damit rechnen ?
Mein Hauptproblem ist aber einen geeigneten Compiler für den 
"AT89C51RC2, AT89S51/52" zu finden:
Keil-C: mit der freien Version habe ich ein Problem mit der Code-Größe
SDCC: Problem mit Float-Werten

MfG

Juergen

: Verschoben durch Moderator
von Oliver S. (oliverso)


Lesenswert?

Vielleicht hilft das hier weiter:

https://sdcc-user.narkive.com/LPkLQPzg/sprintf-function-and-float-and-int-pic16#

tl;dr: RTFM

Das ist bei Microcontroller toolchains für solchf kleinen Controller 
üblich, dass speicherintensive Funktionen wie printf für floats in den 
default Optionen nicht aktiviert sind.

Olivrmer

von Bernd N. (_bn_)


Lesenswert?


von Thomas Z. (usbman)


Lesenswert?

aus der SDCC Doku:
" printf() The default printf() implementation in printf_large.c does 
not support float (except on ds390), only <NOFLOAT> will be printed 
instead of the value.

To enable floating point output, recompile it with the option 
-DUSE_FLOATS=1 on the commandline. Use--model-large for the 
mcs51port,since this uses a lot of memory."

von Thomas Z. (usbman)


Lesenswert?

Juergen B. schrieb:
> Mein Hauptproblem ist aber einen geeigneten Compiler für den
> "AT89C51RC2, AT89S51/52" zu finden:
> Keil-C: mit der freien Version habe ich ein Problem mit der Code-Größe
> SDCC: Problem mit Float-Werten

schau dir mal den Raisonance Compiler an der ist mittlerweile frei 
verfügbar.

Beitrag "Raisonance vergibt nun RIDE + RKIT-51 Lizenzen kostenlos"

von Εrnst B. (ernst)


Lesenswert?

Wenn der Flash eh schon knapp wird: Überlegen ob du auf float bzw. das 
float-printf verzichten kannst.
Deine Ausgabe hätte eh nur eine cm-Auflösung, du könntest den Umfang 
also in cm berechnen und das als integer ausgeben. Ggfs. mit 
reingemogeltem Dezimal-Komma/Punkt.

von Peter D. (peda)


Lesenswert?

Εrnst B. schrieb:
> Wenn der Flash eh schon knapp wird

Das betrifft nur die Eval Einschränkung des Keil ohne Lizenz.
Der AT89C51RC2 selber hat 32kB Flash. Float braucht etwa 1kB Flash bzw. 
4kB mit printf, scanf.

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