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

uVision 4 compiler memory allocation

Hi All,

I am using DS89C450 MCU and writing my C code using uVision 4 compiler. In my DS89, I had a SRAM of 1kB and I would like to declare a 500 variable of unsigned char therefore I use

unsigned char xdata IR[500];

When I compiler with uVision 4, it show no error and therefore I burn the Hex code into my MCU. However, when I write and then read the IR[500], it give incorrect value

I therefore proceed to use debugger to troubleshoot my code and everything works fine in the debugger. My code does not have any problem.

Therefore I suspect uVision 4 had assign the IR[500] to non SRAM location and therefore the value is actually not written and read.

I would like to know how can I make sure uVision4 assign the SRAM location correctly and is there any setting I need to set before compiling?

Pls help. Thanks a lot

Parents
  • unsigned char xdata data[499], data1[499];
    


    Don't you think it confusing with a symbol named "data" directly after the "xdata" keyword?
    You haven't considered that Keil might have more reserved keywords?
    http://www.keil.com/support/man/docs/c51/c51_le_intdatamem.htm

    And [499] would mean 0..498, i.e. 499 entries.
    My original comment about 501 entries was because I, for some reason, must have been tired and read wrong. I thought you had written [501] - maybe I happened to have the mouse cursor above the last zero.

    But if you want 500 entries, you have to specifically write [500] in the declaration and then you access the elements as [0] .. [499].

Reply
  • unsigned char xdata data[499], data1[499];
    


    Don't you think it confusing with a symbol named "data" directly after the "xdata" keyword?
    You haven't considered that Keil might have more reserved keywords?
    http://www.keil.com/support/man/docs/c51/c51_le_intdatamem.htm

    And [499] would mean 0..498, i.e. 499 entries.
    My original comment about 501 entries was because I, for some reason, must have been tired and read wrong. I thought you had written [501] - maybe I happened to have the mouse cursor above the last zero.

    But if you want 500 entries, you have to specifically write [500] in the declaration and then you access the elements as [0] .. [499].

Children