When my code is compiled, it causes XDATA memory above 100HEX to be addressed with MOVX @R0,A rather than MOVX @DPTR,A instructions. This causes variables in the XDATA range 0 - 100HEX to be overwritten. I do not have this problem with XDATA above C000HEX, and am not sure how far above 100HEX this problem exists. Any solutions would be appreciated. Thank you, Frank Way
Please inlcude a short segment of C code that demonstrates the problem. Note any compiler flags you use too. XDATA can be accessed with R0 as a page pointer by setting up Port 2 and then using R0 to control Port 0 (the LSB). Are you using pdata anywhere? - Mark
Have you seen: http://www.keil.com/support/docs/719.htm You will also need to set up the specifications for PDATA and XDATA in your Project - on the 'BL51 Locate' tab. You may also need to modify startup.a51, which includes the definition of which page of XDATA is used for PDATA See: http://www.keil.com/support/docs/1296.htm (1 "page" = 256 bytes = 0x100 - surprise!) This might also help: http://www.keil.com/support/docs/746.htm