Hi, I have the hardware classical 8051 with an external memory (RAM, FLASH). My program on the assembler. I don't use XBANKING.A51, L51_BANK.A51. Chips switching - simple switching of pins. It works. When I debug the program in uVision, I face a problem. Memory HDATA is defined but really the accessing occurs to XDATA only. The similar problem is present in firmware...\Keil\C51\Examples\FarMemory\4MB Variables on Classic 8051. (Only X: 0x8000 memory is rewritten instead of X:0x28000, X:0x38000) I have written the program very compact which illustrates a problem. The variable (DatX) is rewritten instead of variable change (Dat_far). Who knows as to overcome this difficulty?
Name AccesFarmem extrn HDATA:byte (Dat_far) //extern HDATA:far (Dat_far);-error L103 SegXDat SEGMENT XDATA RSEG SegXDat DatX: DS 7FFFh CSEG AT 0 Ljmp Start org 100h Start: mov SP, #6Fh mov A, #55h mov DPTR, #DatX movx @DPTR, A // switchbank omitted mov DPTR, #Dat_far mov A, #0xAA movx @DPTR, A sjmp $ end
Name ModuleFarmem public Dat_far SegFarDat SEGMENT HDATA RSEG SegFarDat Dat_far: DS 7FFFh end
tryfar.map
LX51 LINKER/LOCATER V4.10a 11/04/2008 20:48:56 PAGE 1 LX51 LINKER/LOCATER V4.10a, INVOKED BY: C:\KEIL\C51\BIN\LX51.EXE AccesFar.obj, ModulFar.obj TO tryfar PAGEWIDTH (80) PRI >> NTCONTROLS (NOLINES) CLASSES (XDATA (X:0X0-X:0X7FFF), HDATA (X:0X10000-X:0X17 >> FFF)) CPU MODE: 8051 MODE INPUT MODULES INCLUDED: AccesFar.obj (ACCESFARMEM) COMMENT TYPE 0: AX51 V3.02a ModulFar.obj (MODULEFARMEM) COMMENT TYPE 0: AX51 V3.02a ACTIVE MEMORY CLASSES OF MODULE: tryfar (ACCESFARMEM) BASE START END USED MEMORY CLASS ========================================================== X:000000H X:000000H X:007FFFH 007FFFH XDATA X:000000H X:010000H X:017FFFH 007FFFH HDATA C:000000H C:000000H C:00FFFFH 000111H CODE I:000000H I:000000H I:00007FH 000008H DATA MEMORY MAP OF MODULE: tryfar (ACCESFARMEM) START STOP LENGTH ALIGN RELOC MEMORY CLASS SEGMENT NAME ========================================================================= * * * * * * * * * * * D A T A M E M O R Y * * * * * * * * * * * * * 000000H 000007H 000008H --- AT.. DATA "REG BANK 0" * * * * * * * * * * * C O D E M E M O R Y * * * * * * * * * * * * * 000000H 000110H 000111H --- OFFS.. CODE ?CO?ACCESFAR?2 * * * * * * * * * * * X D A T A M E M O R Y * * * * * * * * * * * * * 000000H 007FFEH 007FFFH BYTE UNIT XDATA SEGXDAT 007FFFH 00FFFFH 008001H --- --- **GAP** 010000H 017FFEH 007FFFH BYTE UNIT HDATA SEGFARDAT PUBLIC SYMBOLS OF MODULE: tryfar (ACCESFARMEM) VALUE CLASS TYPE PUBLIC SYMBOL NAME ================================================= 00000000H NUMBER --- ?C?CODESEG 00000000H NUMBER --- ?C?XDATASEG 02010000H HDATA BYTE DAT_FAR *SFR* 00000081H DATA BYTE SP SYMBOL TABLE OF MODULE: tryfar (ACCESFARMEM) VALUE REP CLASS TYPE SYMBOL NAME ==================================================== --- MODULE --- --- ACCESFARMEM 00000081H SFRSYM DATA BYTE SP 02000000H SYMBOL XDATA BYTE DATX 01000100H SYMBOL CODE NEAR LAB START LX51 LINKER/LOCATER V4.10a 11/04/2008 20:48:56 PAGE 2 01000000H BLOCK CODE NEAR LAB LVL=0 --- BLOCKEND --- --- LVL=0 01000100H BLOCK CODE NEAR LAB LVL=0 --- BLOCKEND --- --- LVL=0 --- MODULE --- --- MODULEFARMEM 02010000H PUBLIC HDATA BYTE DAT_FAR Program Size: data=8.0 xdata=65534 const=0 code=273 LX51 RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)