Hello!
I have uVision that compiles fine with the C51 v7.03 compiler and the related package, but not complete with the 8.06. I used two different Keil installations. All files are in the same folder.
In the 8.06 I get linker errors like "object does not fit in to pdata page" and "0080H". This looks like the compiler was thinking the PDATA was only 128 bytes, but it is set to 256 bytes in the startup.a51. Any clue what's different in the newer Keil package?
Also there is a warning in 8.06 (which does not show in 7.03) "converting non-pointer to pointer" on this
ptr_xdata = sPtr_obj->Adresse;
while the vars are set like this:
uchar uc_set_obj( uchar pdata *ptr_Set) { uchar i; uchar xdata *ptr_xdata; struct stOBJADR code *sPtr_obj; sPtr_obj=&Obj[*ptr_Set]; . . . ptr_xdata = sPtr_obj->Adresse; }
The struct stOBJADR has a member "uint Adresse;"
I can see no wrong use of the pointers. I just want to be sure that the warning does not affect the code to not work correctly.
"... another pointer, also of type uint"
No!
A pointer is not of type uint!
In this particular case, it might just happen to be the same size as a uint, but that is a pure coincidence - it does not make it the same type.
Just as the fact that some small dogs are the same size as cats does not make them cats!
A pointer may be of type pointer to uint - but it is not of type uint!
Pointers - and only pointers - have pointer type
Therefore, any thing that is not a pointer does not have pointer type - in other words, they have non-pointer type
Hence the warning is correct - you are assigning from a non-pointer (uint) to a pointer.