mikrocontroller.net

Forum: Compiler & IDEs Was wird alles kompiliert??


Autor: Stefan Ditze (endrox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi an alle!!

Is vielleicht jetzt ne blöde Frage von mir, aber ich weiß nicht wirklich 
was alle kompiliert wird und was auf den Controller übertragen wird.

Etwas genauer:

Ich habe eine fertige LCD-Treiber-Bibliothek, die ich etwas modifiziert 
habe, dazu eine Testroutine.

Mich würde jetzt interessieren, ob jede Methode die sich in der 
Bibliothek befindet auch kompiliert wird und auf den Controller 
übertragen wird.

Ich denke mal, dass nur das Benutzte auch kompiliert und auf den 
Controller übertragen wird. Allerdings hatte ich bei einem Test 
plötzlich das Problem, dass der Speicher nicht ausreichte. Daher meine 
Frage.

Danke für alle Antworten!!

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hängt vom Compiler ab. GCC zieht normalerweise alles mit, was in einem 
Quellfile drin ist. Ausser man hilft mit -ffunction-sections und evtl. 
auch -fdata-sections nach. Wenn das Linker-Script das erlaubt.

Autor: Stefan Ditze (endrox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze AVR Studio 4.12 mit einer aktuellen Version von WinAVR 
(Plugin).

@A.K.

Ok, dann werd ich mal die Direktiven versuchen. Wenn es nicht 
funktioniert muss man wohl seine Funktionen aus den einzelnen 
Bibliotheken zusammensuchen. Aber das ist ja eigentlich nicht der Sinn 
von Bibliotheken. Ich habe gedacht, der Compiler holt sich nur die 
Methoden, die ausgehend von der main-Methode auch benutzt werden. Aber 
naja, ist halt nur ne Maschine, kann man nicht so viel Intelligenz 
erwarten :) .

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe gedacht, der Compiler holt sich nur die
>Methoden, die ausgehend von der main-Methode auch benutzt werden. Aber
>naja, ist halt nur ne Maschine, kann man nicht so viel Intelligenz
>erwarten :)

Man kann so viel Intelligenz erwarten, wie in die programmierte 
Umsetzung gesteckt wurde. C ist eine Programmiersprache die das tut was 
du sagst, für das Denken bist du zuständig.

Was du beschreibst ist durch das Bibliothekenprinzip (Library) gedeckt.
Voraussetzung:
jede Funktion in der Library die du benutzt, wurde einzeln kompiliert 
und die kompilierten Module wurden in einer Library zusammengefasst.
Das innerhalb eines Moduls unbenutzte Funktionen nicht mit eingefügt 
werden kommt erst allmählich auf. Ausserdem ist für der Linker und nicht 
der Compiler für etwas derartiges zuständig.



Autor: OliverSo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Compiler kennt normalerweise nur das, was in dem gerade kompilierten 
Sourcefile drinsteht. Daher werden zunächst mal alle Funktionen, die 
drin sind, auch kompiliert. (=in Maschinecode übersetzt). Das ist dann 
aber noch kein lauffähiges Programm.

Den Rest macht dann der linker. Und der ist schlau genug, nur die 
Funktionen ins fertige hex-file zu packen, die dort auch benötigt 
werden. Umgekehrt fällt auch erst beim linken auf, ob nicht doch eine 
irgendwo mal aufgerufene Funktion fehlt.

guggst du auch hier:
Beitrag "Linker dynamisch?"

Oliver

Autor: OliverSo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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

Bewertung
0 lesenswert
nicht lesenswert
OliverSo wrote:

> Den Rest macht dann der linker. Und der ist schlau genug, nur die
> Funktionen ins fertige hex-file zu packen, die dort auch benötigt
> werden.

Nein.  Er packt die Objektmodule aus einer Bibliothek hinzu, die
helfen, ein derzeit undefiniertes externes Symbol zu befriedigen.
Der Objektmodul wird aber komplett reingepackt, ein Konzept einer
Funktion oder etwas derartigem kennt der Linker gar nicht.  Der
kennt nur Objektmodule und Symbole.

(-ffunction-sections und -gc-sections ist eine Krücke, die etwas
vergleichbares emuliert.  Der Linker bekommt in diesem Falle das
Konzept der Funktionen in Form von memory sections ,,hintenrum''
aufgedrängelt.)

All das aber in der Annahme, dass der OP mit ,,Bibliothek'' auch
wirklich eine Objektmodulbibliothek im Sinne des Linkers gemeint
hat.

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.