Forum: Compiler & IDEs WinAVR Overhead?


von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Tag zusammen!
Ich beschäftige mich - obwohl bis jetzt c51-Fetischist - neuerdings mit 
einem ATmega16 in Verbindung mit WinAVR. Ich habe da nur ein Problem. 
Wenn ich das Programm compiliere (Make ALL in Programmers notepad) hat 
das .hex schon über 4 KByte, obwohl noch keine einzige Zeile "echter" 
Code im Quelltext enthalten ist. Muss ich da was am Makefile ändern, 
oder woher kommt diese vergleichsweise "riesige" Datenmenge. Oder muss 
das so? Danke schon mal. Hab das Makefile mal angehängt.

Grüsse,

T

von Karl H. (kbuchegg)


Lesenswert?

Zuallererst schaltest du mal den Optimizer ein.
( -O0 ersetzen durch -Os )

da dürfte dann schon mal einiges wegfallen.

Zum zweiten ist ein HEX File immer noch ein stinknormales
Textfile. D.h. die Dateigröße sagt nur bedingt etwas
darüber aus, wie gross denn nun das Programm im AVR
ist. Die tatsächliche Programmgröße liegt bei weit
unter der Hälfte des Hex Files.

Zum dritten: Ja. Natürlich hast du einen kleinen Overhead
druch den C-Compiler. Dein Programm erwartet ja von
der Laufzeitumgebung auch einen Service. Und die Laufzeit-
umgebung muss natürlich mit in den AVR gebrannt werden.
Die gute Nachricht ist: Der Overhead ist nicht wahnsinnig
gross und er ist konstant, sprich du zahlst nur einmal
dafür. Jegliche weitere Programmvergrößerungen gehen
dann auf dein Konto.

Aber schalt erst mal den Optimizer ein.

von Rolf Magnus (Gast)


Lesenswert?

> [...] obwohl noch keine einzige Zeile "echter" Code im Quelltext
> enthalten ist.

Was dann?

von Thomas (Gast)


Lesenswert?

Was dann? Einfach testweise
_________________________________
#include <avr/io.h>

int main (void){

}
_________________________________
Mit "echtem" Code, meine ich sinnvolle Anweisungen, die den Controller 
irgendwas tun lassen.

Danke KHB,

Thomas

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hast du eventuell im Makefile die Gleitkommaversion von printf()
gelinkt?

von A.K. (Gast)


Lesenswert?

Das leere Programm oben:
  avr-gcc -mmcu=atmega16 -Os size1.c
  objdump -h a.out
=> 0x90 Bytes Code. Finde ich jetzt nicht soooo schlimm.

von Dirk (Gast)


Lesenswert?

Gibt es auch ein Listing wofür die 90Bytes verwendet werden??

von A.K. (Gast)


Lesenswert?

80 der 144 Bytes sind Interrupt-Vektoren. Der Rest löscht Daten die 
implizit mit 0 vorbesetzt sind, kopiert initialisierte Daten aus dem ROM 
und ruft evtl. vorhandene C++-Konstruktoren auf. Auch wenn ein Programm 
nichts davon enthält, der entsprechende Initialiserungscode existiert 
trotzdem.

von Falk (Gast)


Lesenswert?

@Dirk

>Gibt es auch ein Listing wofür die 90Bytes verwendet werden??

Ja, im List file. Im AVR Studio unter den Optionen "List file 
generation" aktivieren, die Datei heist dann *.lss

MFG
Falk

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.