Kaiser-F
31.08.2005, 09:20
Hallo zusammen.
Ich weiß, dass dies hier mal wieder so ein nerviger Threat sein könnte, aber ich konnte bisher nichts im Forum finden, was dieses Thema anbelangt.
Ich arbeite momentan mit dem CAN-bus, und baue mir eine Steueranlage auf.
Diese hat mehrere Kommandostände, welche die Datenpakete an die Steuereinheit senden.
In CAN kann man jedem Datenpacket einen "Identifizierer" zuweisen.
Um die auswertung zu erleichtern, will ich das folgendermaßen machen:
Der Identifier ist 11Bit groß.
Dieser wird in eine uint16_t Variable sid eingelesen.
Bit 0 - 5 geben auskunft über den Befehl,
Bit 6 - 10 geben auskunft über den Absender.
Nun will ich das ganze in zwei Variablen aufteilen:
uint8_t absender
uint8_t befehl
Ich habe das bei mir folgendermaßen gelöst:
receive.sender = (sid>>6);
x = (sid<<2);
receive.befehl = (x>>2);
sid ist der Idenfitier, der zuvor ausgelesen wurde,
x ist eine zwischenvariable.
Das ist nicht der einzige Fall in meinen Programm...
Darum würde ich gerne wissen, ob es dafür einen leichteren Weg gibt?
Wenn ich zB bit 3-4 einer 8 Bit-Variable auslesen möchte,
dann muss ich sie erst nach links verschieben und in eine Zwischenvariable abspeichern, und dann wieder nach rechts veschieben, um die anderen Stellen zu beseitigen....
Ich hoffe man kann verstehen was ich ansprechen möchte...
Vielen Dank,
Ich weiß, dass dies hier mal wieder so ein nerviger Threat sein könnte, aber ich konnte bisher nichts im Forum finden, was dieses Thema anbelangt.
Ich arbeite momentan mit dem CAN-bus, und baue mir eine Steueranlage auf.
Diese hat mehrere Kommandostände, welche die Datenpakete an die Steuereinheit senden.
In CAN kann man jedem Datenpacket einen "Identifizierer" zuweisen.
Um die auswertung zu erleichtern, will ich das folgendermaßen machen:
Der Identifier ist 11Bit groß.
Dieser wird in eine uint16_t Variable sid eingelesen.
Bit 0 - 5 geben auskunft über den Befehl,
Bit 6 - 10 geben auskunft über den Absender.
Nun will ich das ganze in zwei Variablen aufteilen:
uint8_t absender
uint8_t befehl
Ich habe das bei mir folgendermaßen gelöst:
receive.sender = (sid>>6);
x = (sid<<2);
receive.befehl = (x>>2);
sid ist der Idenfitier, der zuvor ausgelesen wurde,
x ist eine zwischenvariable.
Das ist nicht der einzige Fall in meinen Programm...
Darum würde ich gerne wissen, ob es dafür einen leichteren Weg gibt?
Wenn ich zB bit 3-4 einer 8 Bit-Variable auslesen möchte,
dann muss ich sie erst nach links verschieben und in eine Zwischenvariable abspeichern, und dann wieder nach rechts veschieben, um die anderen Stellen zu beseitigen....
Ich hoffe man kann verstehen was ich ansprechen möchte...
Vielen Dank,