Guten Abend,
ich möchte die Can lib von kreatives-chaos einbinden!
Mein Problem ist das ich nicht weiß wo ich LDFLAGS += -L. -lcan im
Atmel Studio eintragen soll!
Wäre sehr nett wenn mir jemand helfen könnte.
Lg
Uschi
Nein, richtiges Forum.
Du hast ein Problem mit deiner PC-Software namens Atmel Studio, du
hast kein Problem mit dem GCC. Im Gegenteil, du weißt ja bereits,
dass du dem GCC die passenden Optionen -L und -l mitgeben musst,
mehr kann der Compiler nicht für dich tun.
Ich auch nicht, da ich kein Windows benutze. Allerdings wäre zu
vermuten, dass du irgendwo in den Projekteinstellungen Details zur
Parametrierung des Linkers bzw. des Link-Vorgangs findest. An
dieser Stelle solltest du diese Optionen unterbringen.
Vorsicht aber mit „-L.“: das Verzeichnis „.“ ist das Verzeichnis,
aus dem heraus Atmel Studio dein Projekt compiliert. Bist du dir
völlig sicher, welches Verzeichnis das ist? Ich würde lieber mit
einem expliziten Pfad ins Rennen gehen.
Danke für Eure Hilfe.
Habe es so versucht
Stefan Ernst schrieb:> Project -> Properties -> Toolchain -> AVR/GNU Linker -> Libraries>> Oben "can" eintragen und unten "."
Leider kommt der Fehler "cannot find -lcan"
Habe ein Bild gemacht um es zu verdeutlichen.
Wäre Super wenn mir jemand sagen kann was ich falsch mache!
LG
Uschi
Uschi schrieb:> Leider kommt der Fehler "cannot find -lcan"
Siehe:
Beitrag "Re: Atmelstudio6 lib einbinden"
2. Absatz
Dein Atmel Studio wechselt zum Ausführen des Makefiles sehr
wahrscheinlich nicht in das Verzeichnis, in dem sich deine
libcan.a befindet, sondern in irgendein anderes. Fang' doch
erstmal mit einem absoluten Pfad hinter -L and. Alternativ zu
-L und -l kannst du genausogut gleich <pfad dahin>/libcan.a
schreiben. Es ist für den Linker kein Unterschied, ob er eine
Bibliothek durch explizite Nennung der .a-Datei auf der Kommando-
zeile oder durch die Option -l einbindet.
Schreib Vorwärtsschrägstriche, also c:/pfad/zur/lib/libcan.a,
keine Backslashes. Je nach verwendeter Shell beim Ausführen von
«make» könnten Backslashes ggf. als Sonderzeichen gewertet werden
und müssten doppelt notiert werden (c:\\pfad\\zur\\lib\\libcan.a).
Uschi schrieb:> So jetzt habe ich eine neue Fehlermeldung
Versuch mal herauszufinden, wo die genaue Kommandozeile steht, mit
der der Compiler und Linker aufgerufen werden, und poste diese hier.
Ich fürchte, dass die lib nicht weit genug hinten dort steht und
daher gar nicht in Betracht gezogen wird.
> Siehe Bild!
Kann man denn den Text nicht per copy & paste übernehmen? Es ist
etwas lästig, für zwei "undefined reference"-Meldungen sich einen
überdimensionalen Screenshot ansehen zu müssen, in dem man dann
erstmal den eigentlichen Fehler suchen darf.
Im letzten Bild, obiges Fenster (Libraries) kommt der Name der Lib rein
(z.B. libcan.a).
Im unteren Fenster nur der Pfad. Ich habe dort stehen: ..\.\
Die Lib, also das File *.a muß in diesem Fall im Projektverzeichnis
stehen, also dort, wo *.c, *.h usw. sind.
Noch ein Hinweis: Die Lib hast du bestimmt an den Prozessor angepaßt,
die Pins festgelegt usw. und dann compiliert, eh du sie im Studio
verwenden willst?
Ich mach das seit Jahren so, erst im AVR-Studio und jetzt im
ATMEL-Studio und es klappt auf jeden Fall.
Viel Erfolg!
Guten Abend,
Bernd S. schrieb:> Im letzten Bild, obiges Fenster (Libraries) kommt der Name der Lib rein> (z.B. libcan.a).> Im unteren Fenster nur der Pfad. Ich habe dort stehen: ..\.\> Die Lib, also das File *.a muß in diesem Fall im Projektverzeichnis> stehen, also dort, wo *.c, *.h usw. sind.
Das habe ich jetzt versucht aber ohne Erfolg.
Bernd S. schrieb:> Die Lib hast du bestimmt an den Prozessor angepaßt,> die Pins festgelegt usw. und dann compiliert, eh du sie im Studio> verwenden willst?
Das habe ich auch gemacht ich Verwende den AT90Can128.
Ich habe jetzt mal mein Programmverzeichnis gezipt und angehängt.
Vielen Dank für Eure Hilfe
Uschi
PS Danke für Eure Geduld!
Der Linker findet die can_init usw. nicht. Da ist nur die Definition
vorhanden (im can.h), aber die eigentliche Implementation findet er
nirgends. Also auch nicht in der libcan.a, darum hab ich mal eine
"libcan_128.a" von mir eingebunden. Schon findet er alles und compiliert
komplett. Meine "libcan_128.a" muß aber jetzt nicht unbedingt mit deinen
Anforderungen übereinstimmen. Das war nur ein Test, ob er dann
compiliert.
Das heißt, du mußt dir deine eigene libcan.a nochmal erstellen und im
Studio einbinden.
Ich habe natürlich im Studio auch meinen Namen "libcan_128.a"
eingetragen, damit er die lib findet. Schau es dir mal an und versuche
das Projekt zu compilieren.
Also ist deine libcan.a nicht in Ordnung. Versuche die nochmal zu
erstellen.
Ich hänge das komplette Projekt hier an. Viel Erfolg!
Uschi schrieb:> Vielen Dank mit Deiner Lib geht es auch bei mir!> Vielen Vielen Dank!
Das freut mich!
>> Was muß man beim erstellen der Lib beachten?>
Ich versuchs mal. Hab gerade keinen 128er da, deshalb das ganze nur
theoretisch.
Im Verzeichnis "src" ist das makefile.
Dort den Prozessor einstellen:
1
# MCU name
2
MCU=at90can128
Ein Stück weiter unten die Prozessorfrequenz (in kHz) einstellen:
1
F_CPU=14745600
Im gleichen Verzeichnis ist die config.h
Dort den Prozessor auswählen:
1
#define SUPPORT_MCP2515 0
2
#define SUPPORT_AT90CAN 1
3
#define SUPPORT_SJA1000 0
Dann mit "make lib" die Library erstellen. Dabei darf keine
Fehlermeldung kommen. Wenn das passiert ist, die gerade erstellte
libcan.a, die config.h und die can.h in dein Verzeichnis "main" kopieren
und dann sollte alles funktionieren.
Du kannst gern versuchen, ob deine Anwendung mit meiner libcan_128.a
läuft. Aber ich weiß nicht, mit welcher Frequenz ich den Prozessor
eingestellt habe. Kann 14745600 kHz sein oder auch 16000000 kHz.
Wenns funktioniert, ist es gut, wenn nicht, mußt du es schaffen, sie
selbst zu erstellen :-)