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?
I presume both are being mapped into the 8051's XDATA address space? This is a job for the Linker. Keep the definitions of your Flash & NVRAM variables is separate files, and use Linker directives to locate them in the appropriate address ranges. You will, of course, need to study the Linker Manual - probably also worth browsing through the Application Notes, and searching the knowledgebase. NB: you don't need to have all your Flash variables defined in a single file, nor all your NVARM variables in a single file - you just jave to ensure that no file contains both Flash and NVRAM variable definitions.
The two memories would occupy different address ranges in the xdata memory space. You would not use two extra keywords. The _at_ keyword might come in handy for you. It allows you to place individual variables at particular memory addresses. When declaring large amounts of data, it is probably easier to keep the variable in separate files, and use the linker controls to locate the entire segment into flash or NVRAM as Andrew describes.
Can U eloborate it. It will be useful for me
Can you not type as though you are on a mobile phone? Seriously - how much time do you save by typing "U" instead of "you"?
"Seriously - how much time do you save by typing "U" instead of "you"?" It's a capital 'U' as well. That's quite a sophisticated bit of hand/brain coordination.
Sorry for my mistake. Kindly excuse.