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

Error L107: ADDRESS SPACE OVERFLOW

Hi,

We are developing firmware for Cypress EZUSB processor. At beginning, our program only had 1 source C file and it worked fine. Now we have 2 source C file which share 2 common header files, and it suddenly gave this link error, Error L107: ADDRESS SPACE OVERFLOW.

linking...
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   XDATA
    SEGMENT: ?XD?TIMER0
    LENGTH:  0654H
*** WARNING L6: XDATA SPACE MEMORY OVERLAP
    FROM:    8000H
    TO:      8010H
*** WARNING L6: XDATA SPACE MEMORY OVERLAP
    FROM:    8020H
    TO:      803FH
Program Size: data=13.0 xdata=3338 code=283
Target not created

We have simplified the program as below(giving the same error msg):

1. main C file

#pragma NOIV    // Do not generate interrupt vectors
//--------------------------------------------------
#include <ezusb.h>
#include <ezregs.h>
#include <fx.h>

#include "lcb.h"
#include "head.h"

//-------------------------------------------
// Code
//-------------------------------------------

void main(void)
{
 // Initialize endpoints, interrupts, and ports
  init();

}

void init(void)
{
}
//------------------------------------------------------
// USB Interrupt Handlers
//      The following functions are called by the USB interrupt jump table.
//-----------------------------------------------------------------------------
void ISR_IBN(void) interrupt 0
{
}
void ISR_Ep0in(void) interrupt 0
{
}
void ISR_Ep0out(void) interrupt 0
{
}
void ISR_Ep1in(void) interrupt 0
{
}
void ISR_Ep1out(void) interrupt 0
{
}
void ISR_Ep2in(void) interrupt 0
{
}
void ISR_Ep2out(void) interrupt 0
{
}
void ISR_Ep3in(void) interrupt 0
{
}
void ISR_Ep3out(void) interrupt 0
{
}

void ISR_Ep4in(void) interrupt 0
{
}
void ISR_Ep4out(void) interrupt 0
{
}
void ISR_Ep5in(void) interrupt 0
{
}
void ISR_Ep5out(void) interrupt 0
{
}
void ISR_Ep6in(void) interrupt 0
{
}
void ISR_Ep6out(void) interrupt 0
{
}

void ISR_Ep7in(void) interrupt 0
{
}
void ISR_Ep7out(void) interrupt 0
{
}
//-----------------------------------------------------------------------------
// Interrups used when RENUM = 1.  Not used for this code.
//-----------------------------------------------------------------------------
void ISR_Ures(void) interrupt 0
{
}

void ISR_Sudav(void) interrupt 0
{
}
void ISR_Sutok(void) interrupt 0
{
}

void ISR_Sof(void) interrupt 0
{
}
void ISR_Susp(void) interrupt 0
{
}

2. timer0.c, this is the timer0 ISR


#include <ezusb.h>
#include <ezregs.h>
#include <fx.h> #include "head.h"
#include "lcb.h" void timer0 (void) interrupt 1 using 1
{ }

3. header1.h

#ifndef LCB_H
#define LCB_H

#define FPGABASE 0x8000

static xdata volatile BYTE      lcb[17] _at_ FPGABASE;
static xdata volatile BYTE VME_DATA[32] _at_ (FPGABASE+32);

// WRITE ADDRESSES
#define WR_INIT_PCP_CNT         lcb[0]
#define WR_READ_PCP_CNT         lcb[1]
#define WR_INC_PCP_CNT          lcb[2]

#define WR_BACK_PMB_CARD        lcb[4]
#define WR_BACK_PMB_ADDR        lcb[5]
#define WR_BACK_PMB_WRITE       lcb[6]
#define WR_BACK_PMB_READ        lcb[7]

#define WR_LATCH_VME_CMD        lcb[15]
#define WR_CLR_VME_CMD          lcb[16]

// READ ADDRESSES
#define RD_55                    lcb[0]
#define RD_AA             lcb[1]

#define LCB_RD_STAT                       lcb[2]
#define bmPCP_RDY                         bmBIT0
#define bmPMB_NOT_RDY           bmBIT1

#define RD_PCP_DATA                     lcb[3]

#define RD_BACK_PMB_DATA        lcb[4]
#define RD_FORE_PMB_DATA        lcb[5]

#define RD_VME_CMD                        lcb[7]

#endif

4. header2.h


#ifndef HEAD_H
#define HEAD_H
//-----------------------------------------------------------------------------
// Global Variables
//-----------------------------------------------------------------------------
static BYTE g_ssv_run;
static BYTE g_bCard;
static xdata float g_cal[6][6][7];
static xdata WORD g_dac_M[6][6][4];
static xdata short g_acssv_buffer[6][6];
static xdata short g_dcssv_buffer[6][6];
static xdata char g_mezz_id[6][6];
static xdata short g_temperature[6][6];
static xdata short g_squelch[6][6];
//-----------------------------------------------------------------------------
// Prototypes
//-----------------------------------------------------------------------------
extern void bootload(void);
void init(void);
#endif

Is there anything wrong with the program structure? Because the program now is almost empty and it's still giving the overflow error.

Thanks for any hint.

0