CAN-Nachrichten auswerten

OP #436514
Lesenswert?
• ▲
▼
Hallo,

ich würde gerne möglichst effizient CAN Nachrichten auswerten. Diese 
bestehen immer aus 1..8 zusammenhängenden Bytes. Beispielsweise kann ein 
Signal bei bit 2 starten und 10bit lang sein. Ich wollte nun 
schrittweise immer zwei Byte (damit maximal 16Bit breite Worte) mit 
einem Short-Zeiger auswählen und dann mit entsprechender Maskierung 
verUNDen. Leider lässte der kompiler die conversion von char* zu short 
int* nicht zu.

Folgendes wollte ich also tun:

short * block;
char msg[]="ABCDEFG";

/*lenght soll die länge meine wortes in bit angeben, starbit ist 
selbsterklärend*/

block = &msg; // also damit sollte der short auf das untere Byte zeigen
block = block & ((short)(pow(2,length) << startbit));

nun sollte eigentlich meine nachrichtig fertig maskiert in block stehen, 
sodass ich diese nur wieder um startbit in die gegenrichtung shiften 
müsste.

gibt es vielleicht eine elegantere lösung, um aus einem 2er Byteblock 
einen beliebig langen (max16) bitblock zu lesen?

grüße und danke für ideen,
toby

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.