When defining global variables in such way:
byte var1;
byte var2;
byte var3;
byte varArray[10];
After compiling, var1 is placed at the lower 8 bits of address 0x00, var2 is placed at the upper 8 bits of address 0x00, var3 is placed at the lower 8 bits of address 0x01, and varArray is located from the upper 8 bits of address 0x01.
If there's a structure pointer such as:
typedef struct
{
byte w8Data1;
byte w8Data2;
byte w8Data3;
byte w8Data4;
byte w8Data5;
byte w8Data6;
byte w8Data7;
byte w8Data8;
word w16Data10;
}STRUCT_TEST;
STRUCT_TEST *sPtr = (STRUCT_TEST *)varArray;
now sPtr->w8Data1 is actually the lower 8 bits of address 0x01, which is var3, but not varArray[0]. The reason is that varArray is not aligned and a structure pointer is always a word pointer in DSC compiler. So I tried to find a flexible way to do the alignment without modifying linker file. I found there's a similar question in this community, and the answer is to define variables in such way:
byte varArray[10] __attribute__((aligned(2)));
But it is NOT working at all in CW10.6 on 56F84xxx.
Is there a solution for this? I need the answer asap.