Optimierungsergebnisse für Arduino 1.0

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 variablen

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

Einfach im code

int main(void) {
  init();
  //
    setup-code
  //
  while(1) {
  //
    loop-code
  //
  }
}

verwenden.

Ich sage ja nicht, dass man das muss. Dieses 'serial event' brauche ich persoenlich auf keinen fall und daher bin ich froh, dass man es so eliminieren kann.

kann man eine Main.cpp auch nur für das Projekt benutzen oder geht das nur für alle Projekte?