Hi, Could you help me please. Do you know how this offset is written without using "_at_" keywords. this developpment compiled and run properly on an older compiler (CC51).It is using 2 bank register, signal and serial interrupt, and is coded in asm with C. I link with LX51. the MAP file generated indicate this: < START STOP LENGTH ALIGN RELOC MEMORY CLASS SEGMENT NAME * * * * * * * * * * * C O D E M E M O R Y * * * * * * * * * * * * * 000582H 000584H 000003H --- OFFS.. CODE ?CO?LETM?14 *** OVERLAP *** 000583H 000585H 000003H --- OFFS.. CODE ?CO?LETM?15 > ROM:from 0x0000 to: 0x8000 RAM:from 0x0000 to: 0x2000 I even change the start of ROM (to see) and these adresses and error stay the same. I don't understand this problem. Thanks (nota: I'm french)
"Do you know how this offset is written without using '_at_' keywords." Not quite sure what you mean by that. What offset are you talking about? What are you actually trying to achieve? Have you got a 3-byte symbol defined with "_at_ 0x582" and another with "_at_ 0x583" - that will obviously cause an overlap (from 0x583 to 0x584).
I think that you understand the meaning, namely that the compiler imposes addresses to the program on constants, apparently related to the segmentation, as if I had coded with the keyword "_ At _". But nowhere in my sources I do not use this keyword, nor in .C neither in .A51. The manual (assembler p364) tells that the area is occuped by several segment. My segments was declared as: LETM_PRT SEGMENT BIT ; ports LETM_BA SEGMENT DATA BITADDRESSABLE ; LETM_BI SEGMENT BIT ; LETM_DA SEGMENT DATA ; BB2_XD SEGMENT XDATA PAGE ; buffer BC2L_XD SEGMENT XDATA PAGE ; buffer BC2E_XD SEGMENT XDATA PAGE ; buffer BB3_XD SEGMENT XDATA PAGE ; buffer BC3L_XD SEGMENT XDATA PAGE ; buffer BC3E_XD SEGMENT XDATA PAGE ; buffer LETM_RO SEGMENT CODE PAGE ; LETM_XD SEGMENT XDATA PAGE ; LETM_PR SEGMENT CODE ; code