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

I need to access two memory of xdata

Hi,
I have two memory (Flash & NVRAM). I need to access both memories.

I am writing program in C. If I want to store some variables in NVRAM and some in Flash how do I do it?

Is there any mechanism (like code if U give it will directly go to code memory) so that I will define NVRAM as my first address of the NVRAM then after that if I declare some variables under NVRAM (like code or Xdata) it will work?

Parents
  • unsigned char xdata messaage _at_ 0x012e;
    That's all very well for just one or two variables, but impractical otherwise.

    You would have to manually calculate the address of each variable, and explicitly assign its address in the definition in your source code.
    This would be a very tedious and error-prone process to do manually.

    Fortunately, there is a tool available to do this all automatically - it is called the Linker!

Reply
  • unsigned char xdata messaage _at_ 0x012e;
    That's all very well for just one or two variables, but impractical otherwise.

    You would have to manually calculate the address of each variable, and explicitly assign its address in the definition in your source code.
    This would be a very tedious and error-prone process to do manually.

    Fortunately, there is a tool available to do this all automatically - it is called the Linker!

Children
  • "That's all very well for just one or two variables, but impractical otherwise.

    You would have to manually calculate the address of each variable, and explicitly assign its address in the definition in your source code."

    I suppose you could group all the variables in a struct and locate that with a single _at_? It might even be a nice way of doing it if they are related.

    "Fortunately, there is a tool available to do this all automatically - it is called the Linker!"

    Indeed, but the thing (well, one of the things) I like about the _at_ keyword is that you can see exactly what is going on while you're working on the source rather than having to remember what is specified on a tab in the project options.

    Another possibility I can't remember having tried is to select the 'Keep variables in order' checkbox for the source file, then declare the first variable with the _at_ keyword.

  • I have two memory (Flash & NVRAM). I need to access both memories.

    If you have to access both all the time I have no suggestion except address decoding, but that will either force you to banking or limit you to 64k total.

    In my case I access SRAM "all the time" and need extremely fast operation at such time. Then, oh say once an hour, I need to read a bit from flash to SRAM and have "plenty of time".

    In this scenario, I have all "standard C" variables ( x = y;) be in SRAM and variables in flash only accessible by functions U8 ReadFlashByte(U32 adderess) and WriteFlashByte(U32 adderess, U8 data).

    Erik