Hallo zusammen, ich möchte gern die CAN LIB von Fabian Greif nutzen. Aktuell habe ich hier einen Atmega 328 und eine kleine CAN Platine vom Chinamann mit MCP2515 als Controller. Darauf habe ich das Demo Programm von Fabian Greif zum laufen bekommen :). http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515 Soweit so gut. Nun möchte ich meinen AVR + den MCP in den sleep schicken. Dazu bietet er auf seiner Website eine Bibliothek an, die unter anderem die sleep Funktion beinhaltet (downloadlink unter dem Text) http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek Jetzt mein Problem: Wie erstelle ich die canlib.a? Ich nutze Atmel Studio 7. Wenn ich das Makefile damit öffne, dann sagt er mir immer das diese Datei automatisch erstellt wurde und ich daran nichts ändern kann. Das widerspricht sich allerdings mit der Aussage von Fabian, in der ich im Makefile noch eine Passage einfügen muss, damit der Linker weiß, dass er die Lib auch mit berücksichtigen soll. Kann mir bitte jemand über den Berg helfen? Wie kann ich a) mit Atmel Studio die libcan.a erstellen? b) welche Dateien muss ich meinem Projekt hinzufügen (config.h, can.h und libcan. a in mein Projektverzeichnis kopieren und im Atmel Studio mit hinzufügen c) muss ich dann nur die can.h includieren? oder noch mehr? d) wie teile ich meiner Konfigiration mit, dass er die canlib.a mit berücksichtigen soll? VG Jens
das Makefile wird automatisch erzeugt aus den Projekteinstellungen. Einfach in den Projekteinstellungen beim linker die entsprechenden Option setzen. ja klar musst du die includieren ;) wenn sie schon vorgekaut ist macht der linker den Rest..
:
Bearbeitet durch User
Hey, vielen Dank für eine Antwort! Ich habe gerade mal geschaut. Unter den Projekteistellungen finde ich: AVR/GNU Linker --Libraries Unter Pfad trage ich den Pfad ein, wo die Lib liegt. Soweit klar. Aber in welchem Format trage ich die lib ein? einfach "canlib.a"? VG Paul
Ich nutz den Code auch seit Langem, und ich würde das nicht als Library bauen. Als Library kannst du u.A. nicht so einfach die Library mit anderen Chips nutzen, da da doch einiges an Hardware-spezifischen Code drinsteckt, der via Preprozessor ausgewählt wird. Füg den gesamten Ordner als Kopie deinem Projekt hinzu und laß das mit übersetzen! Das macht vieles einfacher.
Hallo, vielen Dank für die schnelle Antwort! Ich habe jetzt alle Dateien in mein Projektverzeichnis kopiert und die can.h inkludiert. Dann habe ich das Testprogramm von Fabian kopiert. Leider lässt es sich nicht übersetzen :(. Error recipe for target 'can_buffer.o' failed Error recipe for target 'main.o' failed Error recipe for target 'mcp2515.o' failed Error recipe for target 'mcp2515_buffer.o' failed Error unknown type name 'prog_uint8_t' Error unknown type name 'prog_uint8_t' Error unknown type name 'prog_uint8_t' Error unknown type name 'prog_uint8_t' Error unknown type name 'prog_uint8_t' Error unknown type name 'prog_uint8_t' Muss ich noch mehr includieren? VG
Pack dir die Dateien in ein eigenes Verzeichnis (z.B. can) in deinem Projekt-Root und in deinem eigenem Code includierst du mit
1 | #include "can/can.h" |
Natürlich musst du dann zusätzlich die can/config.h an deine Bedürfnisse (Ports) anpassen. Zusätzlich musst du die Konstanten für den Takt anpassen. Dein China-Modul hat vermutlich einen 8MHz Quarz, aber der Code ist auf 16MHz ausgelegt. Das Timing musst du in can/mcp2515.h ändern. Für die 3 Werte gibt es Online-Rechner.
:
Bearbeitet durch User
Gesundes Neues, ich hab gemacht was du gesagt hast. Ist für die Übersicht auf jeden Fall schon mal besser! Tq und Register für 8MHz anpassen und in der config.h meine Pins hinterlegen habe ich auch gemacht. Hat ja bei dem Beispiel ohne die lib schon funktioniert. Leider habe ich immer noch das Problem das ich nicht kompilieren kann. Die gleichen Fehlermeldungen wie oben. Was könnte ich noch falsch machen? VG
Füge indeiner can.h ziemlich am Anfang die folgende Zeile ein:
1 | #define prog_uint8_t uint8_t
|
Dann sollte der Code compilieren.
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.