Data mismatch with structure pointer
Hello, I recently migrated from 8 bit processors and something that has always worked for me is showing some unexpected behavior. Clearly I am missing something very obvious to you 32 bit guys
// define a structure somewhere in header file
typedef struct{ char first[2]; char second[2]; char third; char fourth; uint8_t fifth; uint16_t sixth; uint8_t seventh; char eight;} my_struct;// create a field
uint8_t my_field[11]={0x2D, 0x43, 0x30, 0x30, 0x52, 0x75, 0x01, 0x0D, 0x00, 0x01, 0x21};
my_struct *p_to_mystruct=(void *)my_field;
now if I look into contents of p_to_mystruct i get this:
p_to_mystruct->first[0] = 0x2D
p_to_mystruct->first[1] = 0x43
p_to_mystruct->second[0] = 0x30
p_to_mystruct->second[1] = 0x30
p_to_mystruct->
third
= 0x52
p_to_mystruct->
fourth
= 0x75p_to_mystruct->fifth = 0x01
p_to_mystruct->sixth = 0x0100 // NOTICE A PROBLEM HERE
p_to_mystruct->seventh = 0x21 // ALSO WRONG
p_to_mystruct->eight = 0xb5 // ALSO WRONG
It looks as if there happened some kind of shift when referencing to the sixth member of my_struct.
Data in SRAM @ the location where p_to_mystruct is pointing to is as follows:
Address0-34-78-B
00000000200000002D4330305275010D000121B5
I guess it has something to do with the fact that the program somehow can't stitch the uint16_t tohether from the end of one word and the begenning of the other one but I have no idea why and how to avoid this kind of behavior.