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!!
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.
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 :) .
>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.
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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.