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

Hi all,







I have a program for my STR710 MCU that is running fine. I added the following function:
void Initialisation_INT(void)<
EIC_FIQConfig(DISABLE);

EIC_IER0 &= 0x0000;

/**Disable all unused IRQ interruptsin the EIC_ICR reg****/







/***vullen van SIR reg*****/



EIC->SIR[T0TIMI_IRQChannel] = ((u16)T0TIMI_IRQHandler << 16);<
EIC->SIR[FLASH_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[RCCU_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[RTC_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[WDG_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[XTI_IRQChannel] = ((u16)XTI_IRQHandler << 16);



EIC->SIR[I2C0ITERR_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);
EIC->SIR[I2C1ITERR_IRQChannel]= ((u16)DEFAULT_IRQHandler << 16;
EIC->SIR[UART0_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[UART1_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[UART2_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[UART3_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[SPI0_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[SPI1_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[I2C0_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[I2C1_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[CAN_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[ADC_IRQChannel] = ((u16)ADC12_IRQHandler << 16);<
EIC->SIR[T1TIMI_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[T2TIMI_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[T3TIMI_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[HDLC_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[USBLP_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
IC->SIR[T0TOI_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC->SIR[T0OC1_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);
EIC->SIR[T0OC2_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<




/**Configure and enable IRQ for A/D Converter**/<
//EIC->SIR[ADC_IRQChannel] = ((u16)ADC12_IRQHandler << 16);<
EIC_IRQChannelConfig(ADC_IRQChannel, ENABLE);<
EIC_IRQChannelPriorityConfig(ADC_IRQChannel, 2);<
/****Configure and enable IRQ for Timer 0**/<
EIC->IVR = (u32)T0TIMI_IRQHandler;<
EIC_IRQChannelConfig(T0TIMI_IRQChannel, ENABLE);<
EIC_IRQChannelPriorityConfig(T0TIMI_IRQChannel, 1);<
/******Configure and enable IRQ for XTI*****/<
//EIC configuration



EIC_IRQChannelPriorityConfig(XTI_IRQChannel,1);<
EIC_IRQChannelConfig(XTI_IRQChannel,ENABLE);



}
No problem till now. But when I added code to the function. The new function is:
void Initialisation_INT(void)
{
EIC_FIQConfig(DISABLE);

EIC_IER0 &= 0x0000;

/**Disable all unused IRQ interruptsin the EIC_ICR reg*****/<
/**vullen van SIR reg*******/



EIC->SIR[T0TIMI_IRQChannel] = ((u16)T0TIMI_IRQHandler << 16);<
EIC->SIR[FLASH_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC_IRQChannelPriorityConfig(FLASH_IRQChannel, 0);



EIC->SIR[RCCU_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC_IRQChannelPriorityConfig(RCCU_IRQChannel, 0);



EIC->SIR[RTC_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC_IRQChannelPriorityConfig(RTC_IRQChannel, 0);



EIC->SIR[WDG_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);<
EIC_IRQChannelPriorityConfig(WDG_IRQChannel, 0);<
EIC->SIR[XTI_IRQChannel] = ((u16)XTI_IRQHandler << 16);<

/***removed some code, form limited to 7500 char**/
EIC_IRQChannelPriorityConfig(T0TOI_IRQChannel, 0);



EIC->SIR[T0OC1_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);



EIC_IRQChannelPriorityConfig(T0OC1_IRQChannel, 0);



EIC->SIR[T0OC2_IRQChannel] = ((u16)DEFAULT_IRQHandler << 16);



EIC_IRQChannelPriorityConfig(T0OC2_IRQChannel, 0);



/***Configure and enable IRQ for A/D Converter****/



//EIC->SIR[ADC_IRQChannel] = ((u16)ADC12_IRQHandler << 16);



EIC_IRQChannelConfig(ADC_IRQChannel, ENABLE);



EIC_IRQChannelPriorityConfig(ADC_IRQChannel, 2);



/****Configure and enable IRQ for Timer 0****/



EIC->IVR = (u32)T0TIMI_IRQHandler;



EIC_IRQChannelConfig(T0TIMI_IRQChannel, ENABLE);



EIC_IRQChannelPriorityConfig(T0TIMI_IRQChannel, 1);



/****Configure and enable IRQ for XTI*****/



//EIC configuration



EIC_IRQChannelPriorityConfig(XTI_IRQChannel,1);



EIC_IRQChannelConfig(XTI_IRQChannel,ENABLE);



}







After added this code I receive a error while compiling.<

The error:
compiling GVPFILL.C...



linking...



*** ERROR L107: ADDRESS SPACE OVERFLOW



SPACE: CODE



SEGMENT: ?PR?C?SDIV



LENGTH: 00000060H



*** ERROR L138: CODE GENERATION: PROBLEM WHEN PROCESSING INSTRUCTIONS



CAUSE: Target is out of Range
SEGMENT: ?PR?ghw_setptr?T?GHWINIT
ADDRESS: 02000400CH



Program Size: data=9483 const=9914 code=31044



Target not created







If I limit the number of function calls in this function by 1/3 then I do not receive the errors any more. It makes no difference if I limit the code by deleting the upper, middle or lower 1/3 part of the code in this function. It works in all cases.





Does somebody have an idea what the problem could be?







regards Erik

Parents Reply Children
  • Hi and thanks for the answer.

    The problem is solved. In the setting there was reserved to little sapce of the SRAM for my program.

    In uVision the option is:

    Program > Options for target > LA Locate > User classes.

    This was:
    DATA (0x2000A000-0x2000FFFF),
    CODE (0x20000000-0x20009FFF), CONST (0x20000000-0x20009FFF),
    CODE_IRQ (0x20000000-0x40009FFF)

    I changed into:
    DATA (0x2000A000-0x2000FFFF),
    CODE (0x20000000-0x2000FFFF), CONST (0x20000000-0x2000FFFF),
    CODE_IRQ (0x20000000-0x40009FFF)

    So I reserved more SRAM for my program. Problem solved.

    Regards,

    Erik

  • The error message said:

    ""*** ERROR L107: ADDRESS SPACE OVERFLOW"

    The solution was:

    "So I reserved more SRAM for my program. Problem solved."

    To me, that should've been immediately obvious from just reading the meassage literally: the word "overflow" should tell you that something was too big for the space available
    http://www.dictionary.cambridge.org/define.asp?key=56567&dict=CALD

    So your two options were:

    1. make the thing smaller;

    2. make the space available bigger.

    So I'm interested to know this: is it only obvious to me because I'm a native English speaker?
    Is it not obvious if English is not your 1st language?

    This does seem to be a frequent problem - so do Keil (ARM) need to consider using simplified English in their error messages?
    Or should they provide translations for error messages?
    If so, what languages?
    Maybe this is a service that local distributors could provide?

    Here's what the manuals currently say:
    http://www.keil.com/support/man/docs/bl51/bl51_l107.htm
    http://www.keil.com/support/man/docs/lx51/lx51_l107.htm