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
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.
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?
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.
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
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?
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
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.