This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430 link error with ccs5

Other Parts Discussed in Thread: MSP430F5438A

Hi,all

When I build a MSP430 project, I meet a linker error as below.

"../lnk_msp430f5438a.cmd", line 173: error #10099-D: program will not fit into
   available memory.  placement with alignment fails for section ".int46" size
   0x4 .  Available memory ranges:
   INT46        size: 0x2          unused: 0x2          max hole: 0x2 

The error is about an interrupt vector whose length is 2 byte in lnk_msp430f5438a.cmd, howerver, ccs allocate address aligning with 4 byte.

The interrupt vector is set as below.

INT46                   : origin = 0xFFDC, length = 0x0002

When I change length to 4 bytes, the error clears. So, I have 2 questions.

1. Are interrupt vector addresses fixed, must be from 0xFFFE to 0xFF80? May I change the length of interrupt to 4 bytes?

2. If the interrupt address and length could not be changed, how can set ccs alighment to 2 bytes?

The ccs version is 5.2.1.00018, and the device is MSP430F5438A.

 

Hope your help.

 

 

  • Hello Maolin,

    The interrupt vector addresses are indeed fixed from 0xFF80 to 0xFFFE and no circumstances should require the length of these addresses to be changed. I'm assuming that this issue does not exist with blank or simple main code examples, only when you try to include an interrupt to which INT46 refers? There could be a problem with the way you initialize the interrupt in your main code, which services the USCI_A1 receive and transmit functions. Can you go into more detail about how this interrupt is set up in your code?

    General wiki article about the 10099 error: processors.wiki.ti.com/.../10099

    Regards,
    Ryan
  • You shouldn't have any interrupts with an address greater than 2-bytes in length. The MSP430 requires that ISRs reside below address 0x10000. Make sure that your ISR function is not being mapped to FLASH address > 0x10000.
  • Thank you for your help.
    I found the cause. I made a mistake in the code leading to two interrupt process point to one interrupt vector. So the interrupt address overflow.

**Attention** This is a public forum