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
  • I hate, I really hate this micro...
    what you are relly saying is: "I hate, I really hate having to think..."

    Erik

    The '51 with all its quirks is, for many applications, the best processor you can choose. Now, the contrary, choosing the '51 for the wrong application is, of course, just as wrong.

Reply
  • I hate, I really hate this micro...
    what you are relly saying is: "I hate, I really hate having to think..."

    Erik

    The '51 with all its quirks is, for many applications, the best processor you can choose. Now, the contrary, choosing the '51 for the wrong application is, of course, just as wrong.

Children