CAN ID aus teilen zusammenfühgen

OP #2968777
Lesenswert?
• ▲
▼
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???
#2968959
Lesenswert?
• ▲
▼
** 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.
Gast #2969042
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.