-         

Ergebnis 1 bis 3 von 3

Thema: AVR-Studio: .c kompilieren => Lib => diese dann linken

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987

    AVR-Studio: .c kompilieren => Lib => diese dann linken

    Anzeige

    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.
    #ifndef MfG
    #define MfG

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    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

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    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.
    #ifndef MfG
    #define MfG

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •