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.

MSP430F5525: How to adjust Memory Map in linker CMD file

Expert 1600 points
Part Number: MSP430F5525


Hello, 

Simple problem, but needs detailed answer, as I don't have actual hardware accessible:

1- I'm using MSP430F5525, and I want to modify the memory map to fit in my application code

2-  The default FLASH and FLASH2 segments are shown below, have these lengthes:

MEMORY
{
    SFR                     : origin = 0x0000, length = 0x0010
    PERIPHERALS_8BIT        : origin = 0x0010, length = 0x00F0
    PERIPHERALS_16BIT       : origin = 0x0100, length = 0x0100
    RAM                     : origin = 0x2400, length = 0x1000
    USBRAM                  : origin = 0x1C00, length = 0x0800
    INFOA                   : origin = 0x1980, length = 0x0080
    INFOB                   : origin = 0x1900, length = 0x0080
    INFOC                   : origin = 0x1880, length = 0x0080
    INFOD                   : origin = 0x1800, length = 0x0080
    FLASH                   : origin = 0x4400, length = 0xBB80
    FLASH2                  : origin = 0x10000,length = 0x4400
    INT00                   : origin = 0xFF80, length = 0x0002
    INT01                   : origin = 0xFF82, length = 0x0002
    INT02                   : origin = 0xFF84, length = 0x0002

3- The objective is to cut down FLASH segment to length=0x7000 instead of 0xBB80, and use this space in FLASH2

4- I tried changing the values to the following but I got a memory map error as shown below:

MEMORY
{
    SFR                     : origin = 0x0000, length = 0x0010
    PERIPHERALS_8BIT        : origin = 0x0010, length = 0x00F0
    PERIPHERALS_16BIT       : origin = 0x0100, length = 0x0100
    RAM                     : origin = 0x2400, length = 0x1000
    USBRAM                  : origin = 0x1C00, length = 0x0800
    INFOA                   : origin = 0x1980, length = 0x0080
    INFOB                   : origin = 0x1900, length = 0x0080
    INFOC                   : origin = 0x1880, length = 0x0080
    INFOD                   : origin = 0x1800, length = 0x0080
    FLASH                   : origin = 0x4400, length = 0x7000	//0xBB80
    FLASH2                  : origin = 0x10000,length = 0x9000	//0x4400

Error:

Questions:

- What are the correct FLASH and FLASH2 origin values so that I get it working? Please write the lines in details 

- is there anything else that needs to be changed?

- Note: I'll place 1 large array in this combined section, so I think it should be continuous in memory?

  • Hi,

    You can see that the largest address is 0x143ff.

    FLASH2                  : origin = 0x10000,length = 0x9000  //0x4400

    This is try to declare the  largest address to be 0x19000. Make is small!

    Eason

  • Hi Eason, 

    I understand this part, could you please answer my questions above?

  •     FLASH                   : origin = 0x4400, length = 0xBB80
        FLASH2                  : origin = 0x10000,length = 0x4400

    This is the largest length.

    The question is that where you want to put the array? In flash memory? If so, complier will help you to do that.

  • I want to fit the array[0x4800] in FLASH2, for that I cut down a part from FLASH and I want to append it to FLASH2, 

    How should my memory map look like?

    Can I move the interrupt vectors down in the memory so that I fit Flash2 section as a whole above it as shown?

    MEMORY
    {
        SFR                     : origin = 0x0000, length = 0x0010
        PERIPHERALS_8BIT        : origin = 0x0010, length = 0x00F0
        PERIPHERALS_16BIT       : origin = 0x0100, length = 0x0100
        RAM                     : origin = 0x2400, length = 0x1000
        USBRAM                  : origin = 0x1C00, length = 0x0800
        INFOA                   : origin = 0x1980, length = 0x0080
        INFOB                   : origin = 0x1900, length = 0x0080
        INFOC                   : origin = 0x1880, length = 0x0080
        INFOD                   : origin = 0x1800, length = 0x0080
        FLASH                   : origin = 0x4400, length = 0x6F80	//0xBB80
        FLASH2                  : origin = 0xB380, length = 0x9000	//0x10000 - 0x4400
        INT00                   : origin = 0x14380, length = 0x0002
        INT01                   : origin = 0x14382, length = 0x0002
        INT02                   : origin = 0x14384, length = 0x0002
        INT03                   : origin = 0x14386, length = 0x0002
        INT04                   : origin = 0x14388, length = 0x0002
        INT05                   : origin = 0x1438A, length = 0x0002
        INT06                   : origin = 0x1438C, length = 0x0002
        INT07                   : origin = 0x1438E, length = 0x0002
        INT08                   : origin = 0x14390, length = 0x0002
        INT09                   : origin = 0x14392, length = 0x0002
        INT10                   : origin = 0x14394, length = 0x0002
        INT11                   : origin = 0x14396, length = 0x0002
        INT12                   : origin = 0x14398, length = 0x0002
        INT13                   : origin = 0x1439A, length = 0x0002
        INT14                   : origin = 0x1439C, length = 0x0002
        INT15                   : origin = 0x1439E, length = 0x0002
        INT16                   : origin = 0x143A0, length = 0x0002
        INT17                   : origin = 0x143A2, length = 0x0002
        INT18                   : origin = 0x143A4, length = 0x0002
        INT19                   : origin = 0x143A6, length = 0x0002
        INT20                   : origin = 0x143A8, length = 0x0002
        INT21                   : origin = 0x143AA, length = 0x0002
        INT22                   : origin = 0x143AC, length = 0x0002
        INT23                   : origin = 0x143AE, length = 0x0002
        INT24                   : origin = 0x143B0, length = 0x0002
        INT25                   : origin = 0x143B2, length = 0x0002
        INT26                   : origin = 0x143B4, length = 0x0002
        INT27                   : origin = 0x143B6, length = 0x0002
        INT28                   : origin = 0x143B8, length = 0x0002
        INT29                   : origin = 0x143BA, length = 0x0002
        INT30                   : origin = 0x143BC, length = 0x0002
        INT31                   : origin = 0x143BE, length = 0x0002
        INT32                   : origin = 0x143C0, length = 0x0002
        INT33                   : origin = 0x143C2, length = 0x0002
        INT34                   : origin = 0x143C4, length = 0x0002
        INT35                   : origin = 0x143C6, length = 0x0002
        INT36                   : origin = 0x143C8, length = 0x0002
        INT37                   : origin = 0x143CA, length = 0x0002
        INT38                   : origin = 0x143CC, length = 0x0002
        INT39                   : origin = 0x143CE, length = 0x0002
        INT40                   : origin = 0x143D0, length = 0x0002
        INT41                   : origin = 0x143D2, length = 0x0002
        INT42                   : origin = 0x143D4, length = 0x0002
        INT43                   : origin = 0x143D6, length = 0x0002
        INT44                   : origin = 0x143D8, length = 0x0002
        INT45                   : origin = 0x143DA, length = 0x0002
        INT46                   : origin = 0x143DC, length = 0x0002
        INT47                   : origin = 0x143DE, length = 0x0002
        INT48                   : origin = 0x143E0, length = 0x0002
        INT49                   : origin = 0x143E2, length = 0x0002
        INT50                   : origin = 0x143E4, length = 0x0002
        INT51                   : origin = 0x143E6, length = 0x0002
        INT52                   : origin = 0x143E8, length = 0x0002
        INT53                   : origin = 0x143EA, length = 0x0002
        INT54                   : origin = 0x143EC, length = 0x0002
        INT55                   : origin = 0x143EE, length = 0x0002
        INT56                   : origin = 0x143F0, length = 0x0002
        INT57                   : origin = 0x143F2, length = 0x0002
        INT58                   : origin = 0x143F4, length = 0x0002
        INT59                   : origin = 0x143F6, length = 0x0002
        INT60                   : origin = 0x143F8, length = 0x0002
        INT61                   : origin = 0x143FA, length = 0x0002
        INT62                   : origin = 0x143FC, length = 0x0002
        RESET                   : origin = 0x143FE, length = 0x0002
    }

    Or should I create FLASH1 segment from the cut part of FLASH and arrange the memory like that? 

    MEMORY
    {
        SFR                     : origin = 0x0000, length = 0x0010
        PERIPHERALS_8BIT        : origin = 0x0010, length = 0x00F0
        PERIPHERALS_16BIT       : origin = 0x0100, length = 0x0100
        RAM                     : origin = 0x2400, length = 0x2000
        USBRAM                  : origin = 0x1C00, length = 0x0800
        INFOA                   : origin = 0x1980, length = 0x0080
        INFOB                   : origin = 0x1900, length = 0x0080
        INFOC                   : origin = 0x1880, length = 0x0080
        INFOD                   : origin = 0x1800, length = 0x0080
        FLASH2                  : origin = 0x4400, length = 0x9000	//0xBB80
        FLASH1                  : origin = 0xD400, length = 0x2A00
        FLASH                   : origin = 0x10000,length = 0x4400	//0x14400

    Both compiled but the application doesn't run on the 5529 launchpad 

  • It seems all fine. 

    What do you mean the code doesn't run? Can you get into debug mode?

    Eason

  • Hi Eason, 

    I got "around this" by changing my code ...

    I'd close this ticket, however, for documentation, Changing interrupt locations didn't allow me even to debug the code, after loading the FW to the device CCS doesn't allow me to Start Debug or Step through...

  • You can't move the reset vector. You can move the others, but only to RAM, and only in your code, not in the linker file. [Ref User Guide (SLAU208Q) Sec 1.3.6.1]

    The second ("FLASH1") variant looks about right, assuming you didn't mess with the vectors (not shown).

**Attention** This is a public forum