Forum: PC-Programmierung Endianess UART unt bit shifting


von Philipp B. (philipp_b993)


Lesenswert?

Hey,
ich habe mal eine Frage zur Endianess und UART. Also mein datenblatt 
(http://www.chafon.com/DownLoadFile.aspx?fid=232) sagt, dass man die 
Bytes mit LSB schicken soll. Was im Grunde einfach nur little endian 
heisst, korrekt? So etwas verwirrt mich der Part mit CRC16. Dort stehen 
zwei Blocke:

LSB-CRC16 (length 1 byte)
CRC16 LSB. CRC-16 checksum, 2 bytes with least significant byte first.

MSB-CRC16 (length 1 byte)
CRC16 MSB.


Mein Ansatz waere einfach CRC16 berechnen und in zwei Bytes aufzuteilen. 
(uint8_t) (crc), (uint8_t) (crc << 8) Und da bin ich mir nicht sicher. 
Muss ich nach rechts oder links verschieben? Ich denke nach Links, weil 
die kleinen Bits ja vorne stehen und die grossen hinten und beim casten 
duerften ja einfach nur die kleinen genommen werden, oder nimmt das 
casten von rechts nach links bits?

Ich nutze uebrings einen STM32F103. Also little endian.

von Dr. Sommer (Gast)


Lesenswert?

Philipp B. schrieb:
> dass man die
> Bytes mit LSB schicken soll. Was im Grunde einfach nur little endian
> heisst, korrekt?

Nein, dass das 1er bit zuerst kommt, dann das 2er bit, ... bis zum 
128er.  Das ist beim UART aber sowieso Standard. Little Endian betrifft 
die Reihenfolge der Bytes, also ob zuerst das Byte mit 256ern...32768ern 
oder erst das Byte mit 1ern...128ern kommt.

Philipp B. schrieb:
> Muss ich nach rechts oder links verschieben?

Nach rechts. Wenn du nach links Shiftest, werden die unteren 8 Bits zu 
0, und beim Casten kommt dann nur 0 raus.

von A. S. (Gast)


Lesenswert?

Die CRC16 ist ein 16-Bit-Wert.

Wenn Du den z.B. in einer Struktur einfach ans Ende anhängst, dann geht 
es mit dem zugehörigen (Spiegel-)Polynom direkt und einfach und Du 
brauchst Dich nicht um MSByte/LSByte zu kümmern (einfach vom ersten bis 
zum letzten Byte crcen, eintragen, rauschpusten und auf der Gegenseite 
incl. crc crcen).

Oder Du fängst halt an mit drehen und wenden und hast noch ein paar mehr 
Baustellen, wo Du einmal zuviel oder zuwenig drehst.

Um die Bits (LSBit/MSBit) kümmere Dich garnicht, das ist beim UART für 
RS232 (fast) immer gleich, jedenfalls unabhängig von Big/Little-Endian.

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
Noch kein Account? Hier anmelden.