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.
Hi guys,
I tried to construct a waveform with more than 6000 points. the program is like:
arg.h . . int xdata wave[6000] . . main(){ . . for...{ wave[i]=i*10; . } .
it passed the compiling and linking. it showed that xdata=12131. but when i ran the program, it's actually showing a messed up waveform. it only works correctly when i reduced the size of the wave[] to 4000, which makes xdata=8131.
i m using version 7.2, and the xram on the board is 128k. i think it's something missing in the program but couldnt figure it out yet since i m just a beginner of mcu programing in c. any suggestion? i really appreciate it.
Thank you Erik. now correct me if i m wrong. in order to enable the 128 k flash memory as xram beyond that internal 8k+256 ram, i need to configure the SFRs of external data memory interface, and the banking(PSbank, PSCTL). and let the compiler arrange the array location in it.
for >8k, just set it up for 64k not banked.
If I have misunderstood your posts and you DO need more than 64k, then there is a SILabs appnote how to do it (it is NOT done the "keil way" but works with Keil).
Banking will slow down XDATA access dramatically
Erik
ok. i read the flash memory part of the datasheet. it's for code and non-volatile data storage. does it mean that i can only put the codes there? i am not sure if i can use it as xram for xdata. if set up the memory >8k, say up to 64k, in EMI0CF, so all the memory beyond 8k is from the flash memory, or i actually need some memory chip?
YOU NEED TO READ "THE BIBLE" (not just for this) the '51 is a harvard architecture
ok. i read the flash memory part of the datasheet. it's for code and non-volatile data storage. does it mean that i can only put the codes there? i am not sure if i can use it as xram for xdata. It is for code only (and possibly some constants)
if set up the memory >8k, say up to 64k, in EMI0CF, so all the memory beyond 8k is from the flash memory, or i actually need some memory chip do you play "air guitar"? then, possibly you can figure out how to use "air memory" :) YES, for more than 8k data memory you need an external RAM
here are the links to "the bible" Chapter 1 - 80C51 Family Architecture: www.nxp.com/.../80C51_FAM_ARCH_1.pdf Chapter 2 - 80C51 Family Programmer's Guide and Instruction Set: www.nxp.com/.../80C51_FAM_PROG_GUIDE_1.pdf Chapter 3 - 80C51 Family Hardware Description: www.nxp.com/.../80C51_FAM_HARDWARE_1.pdf
you can have anything in flash (code) memory that you do not change. Thus if you have an array of constants using the 'code' keyword will place it in flash.
Thanks for the answer.
Thanks Erik, I read the doc from those links, it's a great resource. I finally figured out these things.