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
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.
> [...] obwohl noch keine einzige Zeile "echter" Code im Quelltext > enthalten ist. Was dann?
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
Das leere Programm oben: avr-gcc -mmcu=atmega16 -Os size1.c objdump -h a.out => 0x90 Bytes Code. Finde ich jetzt nicht soooo schlimm.
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.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.