Guten Tag Ich habe vor eine CAN ID aus bestimmten Werten zusammen zu setzten. Ich benutzte die Can-Lib vom kreatives-chaos.com. Die ID soll sich aus BoT- Benachrichtigungstype, der senderadresse, der empfängeradresse und dem Datentyp zusammensetzten. Wenn ich dies mit dem Code hier machen klappt des nicht msg.id = (BoT<<24) | (boardadr<<16) | (rxdrive<<8) | (DoT<<0); aber auch so gehts nicht msg.id = (0x90<<24) | (0x03<<16) | (0x01<<8) | (0x10<<0); wenn ich es aber manuel eingebe z.B. mag.id = 0x09030110 klappt es.... wo ist der fehler???
ins blaue geraten
1 | msg.id = (uint32_t)(BoT<<24) | (uint32_t)(boardadr<<16) | (uint32_t)(rxdrive<<8) | (uint32_t)(DoT<<0); |
** Lötlackl schrieb: > ins blaue geraten >
1 | msg.id = (uint32_t)(BoT<<24) | (uint32_t)(boardadr<<16) | |
2 | > (uint32_t)(rxdrive<<8) | (uint32_t)(DoT<<0); |
wahrscheinlich ein bischen zu spät gecastet. wenn du das Ergebnis von Bot << 24 auf einen uint32_t castest, ist das Kind schon in den Brunnen gefallen, weil durch den <<24 alle Bits nach links rausgeschoben wurden, wenn BoT ein 16 Bit int ist. Also: vorher bereits den BoT auf einen uin32_t casten, dann kann man ihn auch um 24 Bits nach links verschieben. ... ((uint32_t)Bot) << 24) ... und mit boardadr dasselbe machen. Für rxdrive und Dot ist es grundsätzlich nicht notwendig zu casten. Man spart dann dem µC die Arbeit, in 32 Bit zu schieben, wenn es nicht notwendig ist.
Karl Heinz Buchegger schrieb: > wahrscheinlich ein bischen zu spät gecastet. Ups! Sorry. Da habe ich wohl mal wieder tief geschlafen.
Warum muss denn ueberhaupt gecastet werden? Hex Werte werden in Hex geschrieben..
Jupp schrieb: > Warum muss denn ueberhaupt gecastet werden? Weil der Typ sonst int ist, und falls der auf dem (unbekannten) Prozessor 16 Bit breit sein sollte, bleibt nach einem Verschieben um 24 Bit nicht viel davon übrig. > Hex Werte werden in Hex geschrieben.. Ähm, ja. Und mit einem Löffel kann man Suppe essen.
wow Dankeschön für die schnelle und hilfreiche unterstützung.... sry ich vergass den prozessor anzugeben, ich verwende eine Atmel AT90CAN128... Euch allen ein frohes Fest.....
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.