I wrote following code
typedef union { struct { int8_t a; int16_t b; uint32_t c; }; int8_t my_arr[7]; }x; uint8_t arr[7]; int main( void ) { uint32_t i; x *y; for( i = 0 ; i < 7 ; i++ ) { arr[i] = i + 2 * 5; } y = ( x* )arr; i = y->a; i = y->b; i = y->c; }
End result in Y is: a = 0x0a; b = 0x0d0c c = 0x00100F0E my_arr[0-7] = 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10;
& array conatisn arr[0-7] = 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10;
My question is when a= 0x0a , then should be b = 0x0c0b & c = 0x100f0e0d but this is not the case
I am using keil 4.70.0.0, mdk arm
Thanks it has working now with pack instruction.
But I have one more structure with mixture of float
At point of code it is giving error:
argument of type "__packed_float *" is incompatible with parameter of type "float *"
Also what is defalut value n in #pragme pack(n). Help tpic says its 8, where n is no of bytes.
But I think it should be 4 & incorrectly written their. As 4 bytes alignment will be default