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

Compiling differences between C51 v7.03 and v8.06

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.

Parents
  • No, you have never been flamed for using the wrong terminology.

    It is a border case that you have been flamed: But for completely refusing to accept that your terminology is incorrect.

    if millions of people think the same way, it's not necessarily correct, as the history shows

    Not applicable, since we are not talking about what millions of people think, but what a few number of people have defined.

    No, the cast was not hidden away somewhere. It has been discussed a number of times in a number of posts, but you have totally failed to understand our posts, since you have been using a home-grown vocabulary.

    We have also discussed - multiple times - why the cast would not be needed at all, i.e. why the Adresse field shouldn't have been an integer but a pointer in the first place.

    1000ml of water is the same as 1 litre of water. Still, you do a conversion of units when switching between the two. In the same way, the compiler has to do a conversion of data types (and in some cases a conversion of the binary representation).

Reply
  • No, you have never been flamed for using the wrong terminology.

    It is a border case that you have been flamed: But for completely refusing to accept that your terminology is incorrect.

    if millions of people think the same way, it's not necessarily correct, as the history shows

    Not applicable, since we are not talking about what millions of people think, but what a few number of people have defined.

    No, the cast was not hidden away somewhere. It has been discussed a number of times in a number of posts, but you have totally failed to understand our posts, since you have been using a home-grown vocabulary.

    We have also discussed - multiple times - why the cast would not be needed at all, i.e. why the Adresse field shouldn't have been an integer but a pointer in the first place.

    1000ml of water is the same as 1 litre of water. Still, you do a conversion of units when switching between the two. In the same way, the compiler has to do a conversion of data types (and in some cases a conversion of the binary representation).

Children
No data