Was mach ich mit Fließkomma Falsch (Speicher)

OP #879301
Lesenswert?

Hallo,
ich habe ein Problem mit dem Speicher meines Mega 168 ! Also ich habe 6 
Ntc's an meinem MC mit dennen ich eine Temperaturmessung  mache und auf 
dem Display ausgebe , das klapt soweit auch gut bis auf den 
Speicherverbarauch ! Ich komme auf 46% ! Da ich aber noch Menuaufbau und 
eine regelung programieren muß mach ich mir sorgen. Die Platinen hab ich 
leider schon bestückt auf dem Tisch ! Hab das Ganze wohl unterschätzt ! 
Nun ich hoffe das mir jemand sagen kann was ich falsh mache und wie mein 
Code effizienter wird !

Großen Dank im Voraus

Gruß Pier
Angehängte Dateien:
#879333
Lesenswert?

Hallo,
das Grundproblem Deines Speicherverbrauchs ist die float-Bibliothek und 
sprintf beide nehmen Dir sehr viel Speicher.

Schmeiß als erstes die doubles raus, die Berechnungen kannst Du direkt 
mit den ADC Werten machen.

Die Ausgabe des double auf dem LCD ist mit sprintf einfach aber 
speicherintensiv.

Schau mal in diesen Artikel:

http://www.mikrocontroller.net/articles/Festkommaarithmetik

Gruß
Frank
OP #879368
Lesenswert?

Endschuldige bitte aber wo finde ich diese besagten Fils ?

Was würdest du mir empfehlen ,ich meine wie würdest du die umwandlung in 
Grad machen ?? So wie ich das mit Festkomma gelöst habe hatte ich von 
Minus 20 Grad bis 30 Grad nur noch 5 grad schritte da der abstand zu 
klein ist !!!

Vielen Dank fürGruß
Pier
#879602
Lesenswert?

Rene Böllhoff wrote:
> aber mal ehrlich : kommst du mit single nicht aus ? double ist
> eigentlich fast immer oversized.
Die meisten Bibliotheksfunktionen arbeiten standardmäßig mit double 
und beim AVR-GCC sind double und float eh dasselbe, weshalb es 
wurscht ist, was man nimmt.

> sprintf ist (wie frank schon sagte) auch ein richtiger speicher-fresser.
> wenn du den einsparst/selbstbaust kannst du ne menge speicher sparen.
Die Funktionen aus der stdlib.h sind spezialisierter und deshalb 
deutlich genügsamer im Ressourcenverbrauch.

Ansonsten schließe ich mich den anderen an: In diesem Fall müsste das 
eigentlich optimal mit Festkommaarithmetik machbar sein. Gerade bei 
Temperaturen hat man eigentlich nie hohe Anforderungen an die Auflösung 
und v.a. keine Zahlenwerte, die um mehrere Zehnerpotenzen auseinander 
liegen (was den Gebrauch von Gleitkommageschichten sinnvoll machen 
kann).

BTW: "to float" heißt auf deutsch "gleiten" und nicht "fließen". 
Dementsprechend sind das Gleit -kommazahlen...
#879614
Lesenswert?

Johannes M. wrote:

> BTW: "to float" heißt auf deutsch "gleiten" und nicht "fließen".
> Dementsprechend sind das Gleit -kommazahlen...

Und wenn man die dann ins Englische zurück übersetzt, dann werden 
sliding point numbers daraus. Als Alternative könnte ich auch mit 
Schwimmkommazahlen dienen.
#879690
Lesenswert?

Andreas Kaiser wrote:
> Johannes M. wrote:
>
>> BTW: "to float" heißt auf deutsch "gleiten" und nicht "fließen".
>> Dementsprechend sind das Gleit -kommazahlen...
>
> Und wenn man die dann ins Englische zurück übersetzt, dann werden
> sliding point numbers daraus. Als Alternative könnte ich auch mit
> Schwimmkommazahlen dienen.
Na, wir wollen es mal nicht übertreiben... Fest steht nur: float ist 
nicht gleich flow (wobei letzteres tatsächlich fließen heißt...) Ich 
vermute, dass da die Verwechslung ihren Ursprung hat.
OP #880117
Lesenswert?

Vielen Dank für Eure Hilfe bzw Ratschläge !!
Also wenn ich mit Festkommaarithmetik auf die gleich weise rechne wie in 
meinem Code dann hab ich 5 Grad Schritte ! Ich glaub ich steh auf der 
Leitung könnte mir jemand eine Beispiel machen wie ich richtig rechne 
????

Wo finde ich die besagte stdlib.h ???

Vielen Dank für Eure Hilfe

Gruß
Pier
#880125
Lesenswert?

Festkommarechnung heisst nicht, dass du auf ein Komma verzichtest. Du 
legst nur fest, wo es liegt.

Ansatz: Wenn du den ADC-Wert mit 100 multiplizierst, den Kram ganzzahlig 
mit 32bit "long" rechnest, und hinterher als hunderstel Grade verstehst, 
dann hast du wenn es vorher 5-Grad-Schritte waren nun 0,05-Grad-Schritte 
und wohl kein Problem mehr.

Die stdlib.h liegt genau da wo inttypes.h liegt.
OP #880156
Lesenswert?

Man Man bin ich ein Depp!!
Hab alle variablen mit 100 multiplizert !!! und bei stdlib.h < 
>vergessen also ist verständlich wieso der compiller diese lieb nicht 
fand !!!

Vielen DANK für Eure hilfe


Noch eine lezte frage stdlib.h wird diese Header mit einer anderen 
ersetzt oder zu den anderen dazu eingebunden ???

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren