PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR-Studio: .c kompilieren => Lib => diese dann linken



Jaecko
21.09.2010, 15:30
Moin.

Wenn ich das Konzept der Libraries (.a) richtig verstanden hab, wird ja daraus nur das geholt, was im Programm auch wirklich gebraucht wird.
D.h. bei einer normalen .c-Datei werden alle 100 Funktionen in den Flash geworfen, auch wenn ich davon nur 1 brauch. Bei Libs fliegen die unbenutzten 99 tatsächlich raus.

Wie stell ich das nun im AVR-Studio 4.18 an, dass ich die jeweilige .c-Datei trotzdem dort bearbeiten/kompilieren kann, dass diese jedoch NICHT verlinkt wird sondern stattdessen die daraus während dem Build erzeugte .a?

Riecht ziemlich nach einem eigenen Makefile. Möcht ich vorerst aber vermeiden, da ich dann bei jeder Änderung (Hinzufügen/Entfernen/Umbenennen) von Dateien im AVR-Studio das auch nochmal im der Makefile machen muss.

markusj
21.09.2010, 16:46
Hallo Jaecko,

ich habe ne gute Nachricht für dich: Die Aussage ist so nicht korrekt.

Wenn du mit "-ffunction-sections -fdata-sections" kompilierst und der Linker-Aufruf mit "-Wl,--gc-sections,--relax" (relax ist nicht nötig, aber eine weitere Optimierung) erfolgt, pickt der Linker auch nur die benötigten Funktionen heraus.
Einziger Unterschied: Interruptvektoren werden in jedem Fall (mit allen Abhängigkeiten) dazugelinkt, bei Bibliotheken konnte ich feststellen dass dem nicht so ist wenn das entsprechende Modul gar nicht benutzt wird.

mfG
Markus

Jaecko
21.09.2010, 18:27
Das hört sich ja mal gut an, d.h. ich spar mir dem Umweg über die Libs.
Das mit den Interrupts ist aber eigentlich auch logisch; der Compiler weiss ja nicht, ob denn irgendwann mal eine Interrupt-Bedingung auftritt oder nicht. Er könnte höchstens rauslesen, ob sie scharfgeschaltet sind. Darum sicherheitshalber dazu.

Gerade auch mal probiert: Haut wunderbar hin; von 51442 Bytes auf 36020 runter. Erster Gedanke: "Man, was hab ich denn da überall für nen Schei* drin?" 15kB unnötiges Zeugs.