mikrocontroller.net

Forum: Compiler & IDEs WinAVR Overhead?


Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

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

Was dann?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du eventuell im Makefile die Gleitkommaversion von printf()
gelinkt?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es auch ein Listing wofür die 90Bytes verwendet werden??

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.