Ich mache mal einen neuen Thread auf um nicht bei Umstieg auf 1.0 - #15 by system - Deutsch - Arduino Forum zu off Topic zu werden.
madworm:
Mittels des programms 'avr-size' - angewendet auf das vom compiler erzeugte .elf file.Unter windoof muesste man den passenden unterordner des winavr ordners im arduino ordner in PATH einfuegen, damit das im dos-fenster benutzbar wird. Und wo die arduino software die taemporaeren files beim compilieren hinschreibt, weiss ich nicht. Dort befindet sich jedenfalls das .elf file, die .o files und das aus dem .elf erzeugte .hex fuer den upload.
avr-size angewandt auf ein .elf liefert:
TEXT: groesse des eigentlichen programm codes
DATA: verbrauchter ram fuer initialisierte variablen
BSS: verbrauchter ram fuer un-initialisierte variablenDer verbrauch an FLASH speicher ergibt sich aus TEXT + DATA. In den RAM gelangen DATA + BSS + stack + heap.
Mehr dazu gibts hier.
Da liegen ja noch einige interessante Tool im Verzeichnis!
Ich habe mir für Windows mit Delhi ein Programm geschrieben das mit die Ausgabe auf einen Mausklick macht (die .elf liegen im TEMP-Ordner und fangen mit "build" an). Das habe ich heute exzessiv genutzt dazu viel ins Flash geschaufelt, dazu uint8_t & Buffer verkleinert (HardwareSerial.cpp.diff) und meine Bibliotheken abgespeckt, jetzt bin ich wieder im grünen Bereich.
Aber der Unterschied ist noch gewaltig (ich nutzt Ethernet, Wire & ein paar eigene Bibliotheken):
Arduino 0022
text data bss dec hex filename
14800 200 236 15236 3b84 D:\TEMP\build889.tmp\myEthernet0022.cpp.elf
FLASH: 15512 byte (15,14 kB)
RAM: 436 byte (0,42 kB) + stack + heap
Arduino 1.0
text data bss dec hex filename
23266 150 958 24374 5f36 D:\TEMP\build693.tmp\myEthernet.cpp.elf
FLASH: 23928 byte (23,36 kB)
RAM: 1108 byte (1,08 kB) + stack + heap
und dabei ist bei der 0022 Version noch viel Optimierungspotential drin (hab ich etwas "großzügig" hingecodet)...
Wie ist das mit der "Mit eigenem main():" zu verstehen?
der Unterschied zwischen 0022 und 1.0 ist
#if defined(USBCON)
USB.attach();
#endif
...
if (serialEventRun) serialEventRun();
wenn ich das raus nehme sind das nur 52Byte im Flash, 0 im RAM (ich nutze aber auch nicht serial).