Forum: Mikrocontroller und Digitale Elektronik LIB bauen, Atmel Studio 7?


von Jens (Gast)


Lesenswert?

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

von Marco H. (damarco)


Lesenswert?

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
von Jens (Gast)


Lesenswert?

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

von Harry L. (mysth)


Lesenswert?

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.

von Jens (Gast)


Lesenswert?

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

von Harry L. (mysth)


Lesenswert?

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
von Jens (Gast)


Lesenswert?

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

von Pandora (Gast)


Lesenswert?

sieht so aus al ob ein Typ Define fehlt:)

von Harry L. (mysth)


Lesenswert?

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