Hallo, ich habe eine Schaltung mit einem ATmega88 und zwei CAN Schnittstellen. Zwei CAN Schnittstellen bedeuten 2 MCP2515, welche über SPI angesprochen werden. Jeder dieser Controller hat ein extra CS und ein extra INT. Nutzen möchte ich die gängige CAN-Bibliothek: http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek#downloads Der ganze Code baut auf die config.h auf, in welcher u.a. definiert wird, welche Pins am µC CS und INT darstellen. #define MCP2515_CS D,3 #define MCP2515_INT D,4 nun habe ich ja aber alles doppelt... Kann ich irgendwie während der Laufzeit des Programmes diese Belegung ändern, sodass ich beide MCP2515 nach Wunsch ansteuern kann? Oder muss ich die gesamte Bibliothek anpassen? Grüße
@qwertz (Gast) >Kann ich irgendwie während der Laufzeit des Programmes diese Belegung >ändern, >sodass ich beide MCP2515 nach Wunsch ansteuern kann? Nein. >Oder muss ich die gesamte Bibliothek anpassen? Teilweise.
Falk Brunner schrieb: > Teilweise. hm... ich hab es geahnt. Dazu hab ich mir folgendes gedacht: #define MCP2515_CS D,3 #define MCP2515_INT D,4 #define MCP2515_CS_1 D,5 #define MCP2515_INT_1 D,6 Immer wenn die Bibl. MCP2515_CS oder MCP2515_INT verwendet bau ich eine kleine Entweder-Oder Bedingung drumherum und ergänze die beiden neuen defines. Um zu wählen muss ich dann vorher natürlich immer angeben welchen MCP ich meine. Wäre das eine möglichkeit? Oder wie sollte ich das machen?
@qwertz (Gast) >#define MCP2515_CS D,3 >#define MCP2515_INT D,4 >#define MCP2515_CS_1 D,5 >#define MCP2515_INT_1 D,6 >Immer wenn die Bibl. MCP2515_CS oder MCP2515_INT verwendet bau ich eine >kleine Entweder-Oder Bedingung drumherum und ergänze die beiden neuen >defines. Könnte man machen, dazu muss man den Quellcode sehen. Ok, gerade mal geschaut. Das Problem ist deutlich größer, denn es werden ja diverse Datenstruktiren für die Verwaltung angelegt, das muss man alles aufbohren, damit man mehrere parallel verwalten kann. Klingt nach ner Menge Arbeit. Und WENN man die schon mal investiert, sollte man es nicht hart codiert für N=2 machen, sondern variabel für N=1-X. Ist fast der gleiche Aufwand, am Ende aber deutlich flexibler.
Nein, defines werde nicht zur Laufzeit ausgewertet. Da musst du schon den Code anpassen und z.B. die entsprechenden Register, die gerade verwendet werdene sollen, als Parameter angeben.
> Ok, gerade mal geschaut. Das Problem ist deutlich größer, denn es werden > ja diverse Datenstruktiren für die Verwaltung angelegt, das muss man > alles aufbohren, damit man mehrere parallel verwalten kann. Klingt nach > ner Menge Arbeit. Und WENN man die schon mal investiert, sollte man es > nicht hart codiert für N=2 machen, sondern variabel für N=1-X. Ist fast > der gleiche Aufwand, am Ende aber deutlich flexibler. ..hm das klingt ja schwirig. Gibt es andere Möglichkeiten? Vielleicht eine Bibl. die das schon kann? :-)
aber da wird doch gar nichts mit dem CS und dem INT angestellt!?
Ist ziemlich egal. Die ganze Verwaltung ist nicht darauf ausgelegt, dass da mehrere CAN-Ströme verwaltet werden können. Die paar Pin-Sachen sind dein geringstes Problem.
Du könntest trotzdem Glück haben. Bei vielen Dingen ist der Aufrufer dafür zuständig die Datenstruktur bereit zu halten. Zb die Filter. Allerdings hab ich bis jetzt im Code einige Funktionen noch nicht gefunden, wie zb can_static_filter um mal zu sehen, wie das funktioniert. Muss ich mir doch ein Testprojekt aufsetzen, damit mir die IDE hilft, die Relevanten Sachen zusammenzusuchen?
> Allerdings hab ich bis jetzt im Code einige Funktionen noch nicht > gefunden, wie zb can_static_filter um mal zu sehen, wie das > funktioniert. Die Funktion ist doch unter mcp2515_static_filter.c > Muss ich mir doch ein Testprojekt aufsetzen, damit mir die IDE hilft, > die Relevanten Sachen zusammenzusuchen? Ich wäre wirklich überaus dankbar wenn du mir dadurch Tipps geben könntest, wie ich das ganze am besten anstellen sollte.
Das einfachste ist, Du duplizierst den Code komplett. Und einmal werden sämtliche Variablen- und Funktionsnamen mit "_0" erweitert und das andere mal mit "_1". Dann kommt sich nichts ins Gehege und es gibt keine Konflikte.
den Gedanken hatte ich auch schon. Wobei ich dann lediglich einmal alles mit _1 erweitern wollte ;-) Es erscheint mir trotzdem sehr aufwändig. Es gibt ja hunderte #defines etc., was dann alles abgeändert werden muss.
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.