Hello
I am trying to define a segment of 259 bytes at a specific address in my XRAM. I am using assembly and I am doing the following:
PROG SEGMENT CODE STACK SEGMENT IDATA DOWNLOAD_BUFFER SEGMENT XDATA RSEG DOWNLOAD_BUFFER DS 259 XSEG AT 0100h RSEG STACK DS 10H ; 16 Bytes Stack CSEG AT 0 USING 0 ; Register-Bank 0 ; Execution starts at address 0 on power-up. JMP START RSEG PROG ; first set Stack Pointer START: CLR P2.5 CLR P2.6 ;Config I2C ;Set I2C interface CLR SPE MOV I2CADD, #44h MOV I2CCON, #80hinterrupt. MOV DPCON, #04h MOV CFG841, #01h CALL INIT_RAM ?ProcessI2C: CALL GET_NEW_I2C_DATA JMP ?ProcessI2C
The segment "DOWNLAOD BUFFER" is properly created and the length of it 259 bytes like I want to. However, I cannot set it at address 100h like I'd like to.
When I look at the map file, I see the following:
TYPE BASE LENGTH RELOCATION SEGMENT NAME ----------------------------------------------------- * * * * * * * D A T A M E M O R Y * * * * * * * REG 0000H 0008H ABSOLUTE "REG BANK 0" IDATA 0008H 0010H UNIT STACK * * * * * * * X D A T A M E M O R Y * * * * * * * XDATA 0000H 0103H UNIT DOWNLOAD_BUFFER * * * * * * * C O D E M E M O R Y * * * * * * * CODE 0000H 0003H ABSOLUTE CODE 0003H 0135H UNIT PROG SYMBOL TABLE OF MODULE: I2C Slave Polling ASM only (MAIN) VALUE TYPE NAME ---------------------------------- ------- MODULE MAIN C:0003H SEGMENT PROG I:0008H SEGMENT STACK X:0000H SEGMENT DOWNLOAD_BUFFER
DOWNLOAD_BUFFER is set at address 0000h and not at 100h like I would expect it. Why? Could someone tell me what I am doing wrong or what I should do?
Thanks a lot Laurent
http://www.keil.com/support/man/docs/a51/a51_st_segment.htm
http://www.keil.com/support/man/docs/a51/a51_st_xseg.htm http://www.keil.com/support/man/docs/a51/a51_st_rseg.htm