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, 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)