Hallo! Ich möchte gerne einen 32 Bit Wert vom Typ uint32_t übertragen und zwar über 8 I/O Pins. Also müsste ich die Variable in 4 vom Typ uint8_t splitten. Wie mache ich das am besten? Vielen Dank!
union { uint23_t u32; uint8_t u8[4]; } x; // 32-Bit Wert einschreiben: x.u32 = <irgend ein wert>; // Die 8-Bit Werte auslesen a = x.u8[0]; a = x.u8[1]; a = x.u8[2]; a = x.u8[3]; Es geht auch über bit shift befehle, aber mit unions ist es viel komfortabler. Gruss Christian
Geht das eigentlich auch, wenn man einen signed long hat und diese in 4 unsigned chars wandeln möchte? also etwa so in der art: union { long s32; unsigned char u8[4]; } x; was ist das LSB und was das HSB?
Logisch, du musst bloss aufpassen, wo das Vorzeichenbit bei der long-Komponente liegt. Üblicherweise ist dies das höchstwertige Bit. HSB = Höchstwertiges Bit bzw. Byte, wird meistens jedoch als MSB (Most Significant Bit) bezeichnet. LSB = Niederwertigestes Bit bzw. Byte (Lowest significant Bit). Zur Erklärung: Wenn du die Dezimalzahl 4712 anschaust, dann ist 2 das niederwertigste und 4 das höchstwertigste Zeichen. Genau so geht es auch mit Binärzahlen und anderen Zahlensystemen. Gruss Christian
> HSB = Höchstwertiges Bit bzw. Byte, wird meistens > jedoch als MSB (Most Significant Bit) bezeichnet. > LSB = Niederwertigestes Bit bzw. Byte (Lowest > significant Bit). Klar, nur wo liegt dieses im Array? ist x.u8[0] das niederwertigste bit, oder das höherwertigste?
Hängt davon ab, wie long-Werte im Zielsystem abgebildet werden. Die union legt einfach die verschiedenen Variablendeklarationen übereinander. So gesehen wird wahrscheinlich u8[0] das höchstwertige Byte bezeichnen. Ich würde es aber zuerst sicherheitshalber mal ausprobieren. Setze dazu x.s32 = 0x12345678 uind lies danach die 4 Bytes aus, dann weisst du genau wie dieselben im Speicher abgelegt sind. Die einzelnen Werte der vier Bytes x.u8[0] bis x.u8[3] betragen 0x12, 0x34, 0x56 und 0x78. Gruss Christian
Gute Idee! Habs ausprobiert und festgestellt das in x.u8[0] das HSB steckt, wie du schon sagtest.
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.