I am using a TI TUSB3200 (8052 core + USB & audio I/O) and am having trouble with an L107 ADDRESS SPACE OVERFLOW error message when linking. I use the standard STARTUP.A51 with IDATALEN = 100H, as recommended for 8052. It is being linked in so I would assume the linker sees the IDATALEN declaration. Below is a link map of when I chop out enough variables so that the internal data segment is below 128 bytes. If I add any more variables, I get the Overflow error. I would understand if I was pushing the 256-byte limit but the linker seems to choke at the 128-byte boundry. I cannot imagine the stack is using all that extra data memory space.. Suggestions?
LINK MAP OF MODULE: .\Output\TUSB3200 (CODEC) * * * * * * * D A T A M E M O R Y * * * * * * * REG 0000H 0008H ABSOLUTE "REG BANK 0" DATA 0008H 000CH UNIT ?DT?MAIN DATA 0014H 000BH UNIT ?DT?USBENG 001FH 0001H *** GAP *** BIT 0020H.0 0002H.5 UNIT ?BI?DEVICE BIT 0022H.5 0000H.2 UNIT ?BI?USBENG BIT 0022H.7 0000H.2 UNIT ?BI?SOFTPLL BIT 0023H.1 0000H.1 UNIT ?BI?CODEC BIT 0023H.2 0000H.1 UNIT ?BI?MAIN BIT 0023H.3 0000H.1 UNIT _BIT_GROUP_ 0023H.4 0000H.4 *** GAP *** DATA 0024H 0022H UNIT ?DT?DEVICE DATA 0046H 0020H UNIT ?DT?USB DATA 0066H 000BH UNIT ?DT?SOFTPLL DATA 0071H 000AH UNIT _DATA_GROUP_ IDATA 007BH 0001H UNIT ?STACK * * * * * * * C O D E M E M O R Y * * * * * * *
Thanks for the replies. I understand the difference between the direct-addressed SFR space vs. indirect-addressed IDATA space above 80H. I guess to clarify my question, how do I get the C compiler to allocate my variables into the IDATA space without causing a link error? thanks Jeff
To place variables in idata, you must explicitly tell the compiler where you want the variable to go. For example:
idata unsigned int x[10];
That fixed it. Thanks! Jeff