Forum: Compiler & IDEs [AVR] Kompilat zu groß, Fehler im makefile?


von lightninglord (Gast)


Angehängte Dateien:

Lesenswert?

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

von Patrick (Gast)


Lesenswert?

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

von mr. mo (Gast)


Lesenswert?

Optimierungsstufe?

von lightninglord (Gast)


Lesenswert?

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?

von Rolf Magnus (Gast)


Lesenswert?

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.

von lightninglord (Gast)


Lesenswert?

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?

von lightninglord (Gast)


Lesenswert?

Ok hab die Funktion dtostr gefunden, das dürfte funktionieren. Danke 
noch einmal.

von Karl H. (kbuchegg)


Lesenswert?

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
von Rolf Magnus (Gast)


Lesenswert?

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.

von lightninglord (Gast)


Lesenswert?

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