Forum: Compiler & IDEs Was mach ich mit Fließkomma Falsch (Speicher)


von Pier S. (bigpier)


Angehängte Dateien:

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

von Andreas K. (a-k)


Lesenswert?

Mit .map und .lss Files wird es einfacher zu analysieren.

Allerdings benötigt man für sowas meistens keine Fliesskommaarithmetik, 
weil es Festkommaarithmetik genauso tut.

von Frank L. (franklink)


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

von Pier S. (bigpier)


Lesenswert?

Ich habs mit Festkomma probiert aber im unteren temperatur Bereich bin 
ich zu ungenau !

/Mit .map und .lss Files wird es einfacher zu analysieren./
was meinst du damit ???

von Rene B. (themason) Benutzerseite


Lesenswert?

mit map und lss files sieht man was wieviel spiecher belegt ...

aber mal ehrlich : kommst du mit single nicht aus ? double ist 
eigentlich fast immer oversized.
sprintf ist (wie frank schon sagte) auch ein richtiger speicher-fresser. 
wenn du den einsparst/selbstbaust kannst du ne menge speicher sparen.

von Pier S. (bigpier)


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

von Andreas K. (a-k)


Lesenswert?

Pier S. wrote:

> Endschuldige bitte aber wo finde ich diese besagten Fils ?

Project - Configuration Options - Generate Map File & Generate List File

von Andreas K. (a-k)


Lesenswert?

Pier S. wrote:

> 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 !!!

Hast du den Artikel Festkommaarithmetik gelesen und verstanden?

von Frank L. (franklink)


Lesenswert?

Hallo Pier,

> Ich habs mit Festkomma probiert aber im unteren temperatur Bereich bin
> ich zu ungenau !

Das musst Du mir bitte erklären, ich sehe da erstmal keinen Unterschied.

Mach doch mal eine Beispielrechnung.

Gruß
Frank

von Johannes M. (johnny-m)


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...

von Andreas K. (a-k)


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.

von Johannes M. (johnny-m)


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.

von Pier S. (bigpier)


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

von Andreas K. (a-k)


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.

von Pier S. (bigpier)


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 ???

von Frank L. (franklink)


Lesenswert?

Hi,
dazu eingebunden, der Linker holt aus der Bibliothek das was erbraucht

Gruß
Frank

von Pier S. (bigpier)


Lesenswert?

Danke für Eure Hilfe jetzt werde ich wohl Festkommaarithmetik verwenden

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.