This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Address of an element of a struct

I have this code:

typedef struct _DLL_struct
   {
   unsigned char DLL_type;
   unsigned char DLL_lenght;
   unsigned char DLL_data_begin;
   } DLL_struct;

unsigned char xdata FskRxBuf[MAX_SIZE_BUFFER];


void main(void)
   {
   DLL_struct *DLL_ptr;   // pointer to cast on the buffer
   unsigned char xdata chacksum_rx;

   DLL_ptr = (DLL_struct *)FskRxBuf;   // cast the struct to the buffer

   checksum_rx = *(&DLL_ptr->DLL_data_begin + DLL_ptr->DLL_lenght);  // read the received checksum
   }

I tried to define a struct pointer and cast it on a plain char buffer to obtain access to the buffer using the fields of the structure.
I run the code on a debugger and get a problem with the address of the structure fields.
Say that FskRxBuf begins at 0x0292, the debugger tells me that the expression &DLL_ptr->DLL_data_begin is 0x92 and not 0x0292 like I thought.
Where is my mistake?

Parents
  • Yep, I know about alignement, I had a lot of experience on that issue in the past, but thanks to nominate it.

    About the real problem: you're right, I don't mention xdata on the pointer definition, 'cause I hadn't read the generic and memory specific pointer section yet!
    I hate, I really hate this micro...

    For the record: I changed the pointer definition into:

    DLL_struct xdata * data DLL_ptr;   // pointer (in data) to cast on the buffer (in xdata)
    


    and all works fine.

    Except the fact that my debugger continues to show me the expression

    &DLL_ptr->DLL_data_begin = 0x92
    


    but I bet it's a flaw of the debugger (unfortunately it wouldn't be the first one...)

    Thanks a lot for your help.

Reply
  • Yep, I know about alignement, I had a lot of experience on that issue in the past, but thanks to nominate it.

    About the real problem: you're right, I don't mention xdata on the pointer definition, 'cause I hadn't read the generic and memory specific pointer section yet!
    I hate, I really hate this micro...

    For the record: I changed the pointer definition into:

    DLL_struct xdata * data DLL_ptr;   // pointer (in data) to cast on the buffer (in xdata)
    


    and all works fine.

    Except the fact that my debugger continues to show me the expression

    &DLL_ptr->DLL_data_begin = 0x92
    


    but I bet it's a flaw of the debugger (unfortunately it wouldn't be the first one...)

    Thanks a lot for your help.

Children