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
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.
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
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 ???
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.
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
Pier S. wrote:
> Endschuldige bitte aber wo finde ich diese besagten Fils ?
Project - Configuration Options - Generate Map File & Generate List File
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?
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
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...
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.
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.
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
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.
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 ???
Hi, dazu eingebunden, der Linker holt aus der Bibliothek das was erbraucht Gruß Frank
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.