mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keil Compiler Frage


Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich arbeite mich grad in Keil ein und nun stelle ich fest, dass alle
Funktionen in das HEX-File übersetzt werden. Kann man da irgendwo
einstellen, dass die Funktionen, die nicht aufgerufen werden, nicht mit
übersetzt werden sollen?

Tabi

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein.

Linken auf Funktionsebene ist kein übliches Verhalten von
C/C++-Compilern. Diese (genauer: deren Linker) linken auf Modulebene,
wobei ein Modul ein übersetztes C- bzw. C++-Sourcefile ist.
Der Linker linkt alle Module, die zum Projekt gehören (sprich: im
Makefile aufgelistet sind), ohne darauf zu achten, ob der Code
verwendet wird oder nicht.

Nur bei Verwendung einer Library sieht das anders aus; aus der Library
werden nur die Module extrahiert, die auch tatsächlich benötigt
werden.

Also musst Du jede -potentiell- entbehrliche Funktion in ein eigenes
Sourcemodul packen und alle diese Sourcemodule zu einer Library
übersetzen, die Du dann zu Deinem Projekt linkst.

Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, danke!
Mit Librarys habe ich mich ncoh nicht beschäftigt, aber dann muss ich
das wohl machen. Wenn ich dich richtig verstehe, reicht es dann auch
nicht aus, einfach eine Library aus meinem *.c File zu machen, sondern
ich muss jede Funktion in ein eigenes File packen und dann zu einer
Library zusammenführen?!
Oder was bedeutet Sourcemodule?

Ach ja, unterstütze Keil eigentlich das Erzeugen von Librarys?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du verstehst mich richtig.
Wie man mit dem Compiler von Keil Libraries erzeugt, das kann ich Dir
allerdings nicht erklären, aber ich würde annehmen, daß das in der
Dokumentation beschrieben sein müsste.

Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar!
Vielen Dank!

Autor: T. Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keil unterstützt Librarys siehe Handbuch Stichwort TLIB

Gruss

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du für jede Funktion ein eigenes Source-File hast, kannst du auch
einstellen, dass er die nicht benötigten Files einfach nicht linkt. Das
musst du aber manuell machen.

Noch einfacher ist es aber, nicht benötigte Files einfach gar nicht ins
Projekt einzubinden.

Da du für eine Lib eh alles in einzelne Files verpacken musst, kannst
du es auch gleich so machen.

Meiner Meinung nach hat das den Vorteil, dass du nicht bei jeder
Änderung die Lib neu erstellen musst.

Gruß Ralf

Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich hab z.b. ein file, da stehen die routienen für das lcd-display
drin. und das soll ich also zerstückeln und für jede einzelne routiene
ein file erstellen?!
und dann diese files in ein projekt zusammenführen (alle einzeln, ohne
dass sie aufgerufen werden, also ohne main) und dann in eine library
compilieren?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, oder du sparst dir das Lib-Erstellen, und nimmst die einzelnen
Module in das Projekt mit auf. Natürlich nur die, die du brauchst.

Für den eigenen Gebrauch machen Libs aus meiner Sicht keinen Sinn. Die
würde ich eher dann verwenden, wenn ich kommerziell für jemanden
Software entwickle, und sicherstellen will, dass keiner an den
Quellcode rankommt.

Ralf

Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, danke!

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.