Hallo zusammen, beim programmieren eines kleinen Projektes ist mir aufgefallen, dass trotz eines kleinen Programmes der Flash des AVR sehr schnell voll war. Nach dem ich alle Funktionen bis auf die "main" entfernt hatte blieb dennoch ein gewaltiger Speicherbedarf von etwa 38% des Flash bestehen. Hier kann also was nicht stimmen. Da ich erst seit kurzem mit "eigenen" makefiles arbeite, denke ich das sich hier auch der Fehler verbirgt. Verwendet hab ich einen Mega88 mit dem avr-gcc (GCC) 4.7.2 unter Ubuntu 13. Langsam verzweifel ich echt an dem makefile...
Wenn ich das richtig sehe, linkst Du die komplette printf-float-Library dazu - die ist nicht gerade klein. Wird diese wirklich gebraucht? Siehe auch http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_bei_WinAVR_bzw_AVR-Studio
Optimierungsstufe ist s, macht aber kaum einen unterschied zu 1,2 oder 3. Eine Ausgabe von floats auf einem LCD benötige ich. Ich hab die Lib einfach mal eingebunden. Ich dachte der Compiler nimmt sich das was er braucht, den Rest lässt er links liegen. Dem ist wohl doch nicht so. für ein sprintf mit flaots den nur die vfprintf, für was ist den die lprintf_flt gut?
lightninglord schrieb: > Eine Ausgabe von floats auf einem LCD benötige ich. Nun, wenn du die zwingend benötigst, mußt du damit leben. Das braucht sehr viel Flash. Allerdings braucht man in dein meisten Fällen kein float. > Ich hab die Lib einfach mal eingebunden. Ich dachte der Compiler nimmt > sich das was er braucht, den Rest lässt er links liegen. Dem ist wohl > doch nicht so. Nein. Sonst gäbe es schließlich auch nicht mehrere verschiedene Versionen. > für ein sprintf mit flaots den nur die vfprintf, Was willst du damit sagen? > für was ist den die lprintf_flt gut? Um floats ausgeben zu können.
Bei der Berechnung komm ich leider nicht um einen float rum. Bei der Ausgabe würden mir eine bestimmte Anzahl an Nachkommastellen genügen. Daher fand ich die formatierte Ausgabe mit sprintf nicht schlecht. Gibt es eine bessere Methode im Hinblick auf den Speicherbedarf?
Ok hab die Funktion dtostr gefunden, das dürfte funktionieren. Danke noch einmal.
lightninglord schrieb: > Ok hab die Funktion dtostr gefunden, das dürfte funktionieren. Danke > noch einmal. Das ändert aber nichts bzw. nicht viel. Denn auch dtostrf benötigt ja die Floating Point Library um die Textrepräsentierung einer Float-Zahl bestimmen zu können. Ok, die ganzen Möglichkeiten der Formatierung, die printf bietet fallen weg, wenn man printf nicht benutzt, aber ich denke nicht, dass das am Speicherverbrauch groß was ändert. Den Löwenanteil belegen immer noch die Floating Point Funktionen selber. Wenn man Speicher sparen will, dann muss man sich der Frage stellen: Brauch ich WIRKLICH float oder gibt es nicht andere Möglichkeiten? Nicht jede Zahl, die am LCD als "2.456" dargestellt wird, ist programmintern auch tatsächlich ein float. Manchmal (meistens) ist das zb die Zahl 2456, in die bei der Ausgabe zwischen Tausender und Hunderter ein Dezimalpunkt eingeschummelt wurde. Für einen Benutzer sieht es wie eine Fliesskommazahl aus. Der weiß ja nicht, dass (um ein Beispiel zu nennen) sein Computer nicht in Euro rechnet, sondern gleich in Cent und einfach nur bei der Ein Ausgabe die optische Umwandlung Cent auf Euro durch einen zusätzlichen '.' an der richtigen Stelle macht.
:
Bearbeitet durch User
Mit anderen Worten: Nur weil man eine Kommazahl braucht, braucht man nicht unbedingt float. Das braucht man nur, wenn man sowohl betragsmäßig sehr kleine als auch sehr große Zahlen darstellen können will. Die Besonderheit von Float ist schließlich, daß sich die Auflösung an die Größe der Zahl anpasst. Wenn du das nicht brauchst, kannst du auch Fixkommazahlen nehmen, was im Prinzip dem entspricht, was Karl Heinz beschreibt. Dann kannst du dir die komplette float-Bibliothek sparen.
Fixpointzahlen sind mir bekannt ;-). Das Problem liegt wie schon erwähnt wurde am großen Zahlenbereich.
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.