This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Difficulties with access to far memory

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)

0