mikrocontroller.net

Forum: Compiler & IDEs Was macht der Compiler am ANFANG ??


Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was macht der Compiler


... wenn ich eine "leere" Funktion comp., also int main(){}, dann gibt 
es so einen großen Vorspann - warum ? ( zweite Frage:  wo kann ich denn 
die Version des Compilers nachschauen? )

+0000003E:   940C0063    JMP     0x00000063       Jump
+00000040:   940C0063    JMP     0x00000063       Jump
+00000042:   940C0063    JMP     0x00000063       Jump
+00000044:   940C0063    JMP     0x00000063       Jump
+00000046:   2411        CLR     R1               Clear Register
+00000047:   BE1F        OUT     0x3F,R1          Out to I/O location
+00000048:   EFCF        SER     R28              Set Register
+00000049:   E1D0        LDI     R29,0x10         Load immediate
+0000004A:   BFDE        OUT     0x3E,R29         Out to I/O location
+0000004B:   BFCD        OUT     0x3D,R28         Out to I/O location
+0000004C:   E011        LDI     R17,0x01         Load immediate
+0000004D:   E0A0        LDI     R26,0x00         Load immediate
+0000004E:   E0B1        LDI     R27,0x01         Load immediate
+0000004F:   EEE4        LDI     R30,0xE4         Load immediate
+00000050:   E0F0        LDI     R31,0x00         Load immediate
+00000051:   E000        LDI     R16,0x00         Load immediate
+00000052:   BF0B        OUT     0x3B,R16         Out to I/O location
+00000053:   C002        RJMP    PC+0x0003        Relative jump
+00000054:   9007        ELPM    R0,Z+            Extended load program 
memory and postincrement
+00000055:   920D        ST      X+,R0            Store indirect and 
postincrement
+00000056:   30A0        CPI     R26,0x00         Compare with immediate
+00000057:   07B1        CPC     R27,R17          Compare with carry
+00000058:   F7D9        BRNE    PC-0x04          Branch if not equal
+00000059:   E011        LDI     R17,0x01         Load immediate
+0000005A:   E0A0        LDI     R26,0x00         Load immediate
+0000005B:   E0B1        LDI     R27,0x01         Load immediate
+0000005C:   C001        RJMP    PC+0x0002        Relative jump
+0000005D:   921D        ST      X+,R1            Store indirect and 
postincrement
+0000005E:   30A0        CPI     R26,0x00         Compare with immediate
+0000005F:   07B1        CPC     R27,R17          Compare with carry
+00000060:   F7E1        BRNE    PC-0x03          Branch if not equal
+00000061:   940C0065    JMP     0x00000065       Jump
+00000063:   940C0000    JMP     0x00000000       Jump
@00000065: main
---- 5.c 
------------------------------------------------------------------------ 
------------------
6:        {

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vor der ersten Funktion aus main.c werden vom Linker andere Funktionen 
eingebunden.

Dieser als Startupcode bezeichnete Teil hat u.a. die Aufgabe bestimmte 
Vektoren zu initialisieren, DATA aus dem nichtflüchtigen Speicher zu 
kopieren, BSS und Stack zu initialisieren, ggf. die C-Library zu 
initialisieren usw. Der Umfang des Startupcodes ist je nach µC und 
Entwicklungssystem stark unterschiedlich.

Lass dir mal ein Assemblerlistung von main.c alleine erzeugen (Bei GCC 
-S Option) und dann siehst du wie eine "leere" Funktion aussieht.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Compilerversion bekommt man beim GCC mit der -v (oder --version) 
Option raus.

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Assemblerdatei erzeugen per Makefile geht übrigens mit:
$ make main.s

  

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.