We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I want to define some values in code memory with specific location. For example
code unsigned char MyArray[] _at_ 0xF000 = {0x01, 0x02};
After that, I can use "MyArray[0]" and "MyArray[1]" to access the memory at 0xF000 and 0xF001. How can I achieve this?
I've never looked into doing this in C (for the C51), so I don't know if it is possible there.
It can be done in 'C', at least in the sense that no assembly language is required to achieve it. The defining declaration and initialisation needs to be placed in a separate source file and included in the project. The linker project options can then be modified to locate the resulting segment at the required address.
If multiple objects are required at sequential addresses (as though they were contained in a structure) it is necessary to check the 'keep variables in order' box in the options for the source file or the entire project.
"The linker project options can then be modified to locate the resulting segment at the required address."
Yes, I'd forgotten that option. I've done it that way a number of times before, but have nearly always ended up going back to my assembler 'comfort zone'!