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
  • Two things - what settings have you made in your project file where you inform the tools what memory you have?

    Another thing - I don't work with your processor, but some of them requires specific configuration bits to be set to activate that XDATA memory since they may support multiple different mappings.

    But one question - if you need an array of 500 elements, why do you then create an array with 501 elements?

    And another thing - avoid using all-upper-case variable names. All upper-case is normally reserved for preprocessor symbols, to make a developer aware that a symbol as seen in the source code may represent something completely different for the actual compiler.

Reply
  • Two things - what settings have you made in your project file where you inform the tools what memory you have?

    Another thing - I don't work with your processor, but some of them requires specific configuration bits to be set to activate that XDATA memory since they may support multiple different mappings.

    But one question - if you need an array of 500 elements, why do you then create an array with 501 elements?

    And another thing - avoid using all-upper-case variable names. All upper-case is normally reserved for preprocessor symbols, to make a developer aware that a symbol as seen in the source code may represent something completely different for the actual compiler.

Children