Broeselberger
16.03.2005, 15:06
Hallo zusammen,
ich steuere Hardware, die 24-bit-Register beinhaltet. Um die Bits bequem hindrehen zu können, habe ich mir folgendes definiert:
union PLL_Register
{
unsigned char b[3];
} N_PLL_Reg;
Also ein 24 Bit großes Datenfeld, wobei ich per Indizierung auf jedes einzelne der 3 Bytes zugreifen kann
(z.B. N_PLL_Reg.b[1] = 0xAB).
Es funktioniert aber leider nicht alles wie gewünscht:
N_PLL_Reg.b = (N_PLL_Reg.b << 2);
// alle 24 Bits um 2 Bits nach links schieben, die obersten fallen raus
oder auch
if (N_PLL_Reg.b & 0x800000) // wenn Bit 23 = 1 ...
....
bewegen den Compiler nur zu einem müden
error: invalid operands to binary << (bzw. &)
Wenn ich N_PLL_Reg als long definiere, geht das Ganze, aber das ist erstens nicht 24 Bits lang und zweitens ist der schöne Zugriff auf die einzelnen Bytes weg...
Hat jemand 'ne Idee?
KP
ich steuere Hardware, die 24-bit-Register beinhaltet. Um die Bits bequem hindrehen zu können, habe ich mir folgendes definiert:
union PLL_Register
{
unsigned char b[3];
} N_PLL_Reg;
Also ein 24 Bit großes Datenfeld, wobei ich per Indizierung auf jedes einzelne der 3 Bytes zugreifen kann
(z.B. N_PLL_Reg.b[1] = 0xAB).
Es funktioniert aber leider nicht alles wie gewünscht:
N_PLL_Reg.b = (N_PLL_Reg.b << 2);
// alle 24 Bits um 2 Bits nach links schieben, die obersten fallen raus
oder auch
if (N_PLL_Reg.b & 0x800000) // wenn Bit 23 = 1 ...
....
bewegen den Compiler nur zu einem müden
error: invalid operands to binary << (bzw. &)
Wenn ich N_PLL_Reg als long definiere, geht das Ganze, aber das ist erstens nicht 24 Bits lang und zweitens ist der schöne Zugriff auf die einzelnen Bytes weg...
Hat jemand 'ne Idee?
KP