Forum: Mikrocontroller und Digitale Elektronik Keil Compiler Frage


von Tabaluga (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Tabaluga (Gast)


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?

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Tabaluga (Gast)


Lesenswert?

Alles klar!
Vielen Dank!

von T. Stütz (Gast)


Lesenswert?

Keil unterstützt Librarys siehe Handbuch Stichwort TLIB

Gruss

von Ralf (Gast)


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

von Tabaluga (Gast)


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?

von Ralf (Gast)


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

von Tabaluga (Gast)


Lesenswert?

OK, danke!

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
Noch kein Account? Hier anmelden.