struct packedFields
{
// byte 0
unsigned int sx : 5;
unsigned int rtt_4_3 : 3;
// byte 1
unsigned int sy : 5;
unsigned int rtt_2_1 : 3;
// byte 2
unsigned int rtt_5 : 1;
unsigned int cs : 4;
unsigned int ed_4_3 : 2;
unsigned int rtt_0 : 1;
// byte 3
unsigned int ltt_4_0 : 5;
unsigned int ed : 3;
// byte 4
unsigned int ltt_5 : 1;
unsigned int rbr : 1;
unsigned int b_plus : 1;
unsigned int filler_2 : 1;
unsigned int b_minus : 1;
unsigned int lbr : 1;
unsigned int filler_1 : 2;
// byte 5
unsigned int filler_4 : 2;
unsigned int rbb : 1;
unsigned int lbg : 1;
unsigned int be : 1;
unsigned int rbg : 1;
unsigned int filler_3 : 1;
unsigned int lbb : 1;
};
union packedFieldsUnion
{
packedFields a;
byte b [6];
};
void doSomethingWithTheFields (packedFieldsUnion & theFields); // prototype
void doSomethingWithTheFields (packedFieldsUnion & theFields)
{
theFields.a.rtt_4_3 = 3;
theFields.a.ltt_4_0 = 2;
} // end of doSomethingWithTheFields
void setup ()
{
Serial.begin (115200);
Serial.println ();
Serial.print (F("packedFields sized = "));
Serial.println (sizeof (packedFields));
packedFieldsUnion foo;
memset (&foo, 0, sizeof foo);
foo.a.rtt_4_3 = 3;
doSomethingWithTheFields (foo.a.ltt_4_0 = 2;);
Serial.println (F("-- packedFields bytes --"));
for (int i = 0; i < sizeof foo; i++)
Serial.println ((int) foo.b [i], HEX);
} // end of setup
void loop ()
{
} // end of loop
Nick Gammon ♦
- 38.9k
- 13
- 70
- 126