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.

TMS320F28377S: Program will not fit into available memory

Part Number: TMS320F28377S
Other Parts Discussed in Thread: C2000WARE

Tool/software:

Link failure is indicating there is not enough memory. However, the available memory it displays is more then enough for what it needs (0x2d8b). If its a "trampoline" issue, how do I determined and resolve this?

Invoking: C2000 Linker
"C:/ti/ccs1210/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/bin/cl2000" -v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 -g --diag_warning=225 --diag_wrap=off --display_error_number --abi=coffabi -z -m"CMCScannerPlusPlus.map" --stack_size=0x200 --warn_sections -i"C:/ti/ccs1210/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/lib" -i"C:/ti/ccs1210/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/include" -i"C:/ti/c2000/C2000Ware_5_04_00_00/device_support/f2837xs/headers/cmd" -i"C:/ti/c2000/C2000Ware_5_04_00_00/device_support/f2837xs/common/cmd" --reread_libs --diag_wrap=off --display_error_number --xml_link_info="CMCScannerPlusPlus_linkInfo.xml" --rom_model -o "CMCScannerPlusPlus.out" "./src/Ctest.obj" "./src/DRIDevice.obj" "./src/DSR.obj" "./src/EncoderTrack.obj" "./src/Serial.obj" "./src/Trigger.obj" "./src/VT100.obj" "./src/analog.obj" "./src/cmc.obj" "./src/diagstrings.obj" "./src/digitalIO.obj" "./src/log.obj" "./src/move.obj" "./src/protocol.obj" "./src/scanner.obj" "./src/timer.obj" "./src/uart.obj" "./src/utility.obj" "./src/version.obj" "./src/watchdog.obj" -llibc.a -lF2837xS_Headers_nonBIOS.cmd -l"C:/BlueCrest/projects/CMCScannerPlusPlus/cmd/2837xS_Generic_RAM_lnk.cmd"
<Linking>
warning #10210-D: creating ".esysmem" section with default size of 0x400; use the -heap option to change the default size

"C:/BlueCrest/projects/CMCScannerPlusPlus/cmd/2837xS_Generic_RAM_lnk.cmd", line 56: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment/blocking fails for section ".text" size 0x2d8b page 0. Available memory ranges:
RAMGS0 size: 0x1000 unused: 0x0 max hole: 0x0
RAMGS1 size: 0x1000 unused: 0x342 max hole: 0x342
RAMGS2 size: 0x1000 unused: 0x1000 max hole: 0x1000
RAMGS3 size: 0x1000 unused: 0x1000 max hole: 0x1000
RAMGS4 size: 0x1000 unused: 0x1000 max hole: 0x1000
RAMGS5 size: 0x1000 unused: 0x1000 max hole: 0x1000
RAMGS6 size: 0x1000 unused: 0x1000 max hole: 0x1000
RAMGS7 size: 0x1000 unused: 0x1000 max hole: 0x1000
RAMGS8 size: 0x1000 unused: 0x1000 max hole: 0x1000
RAMGS9 size: 0x1000 unused: 0x2 max hole: 0x1

  • I was not a to attach the cmd file. Copied contents below instead.


    MEMORY
    {
    PAGE 0 :
    /* BEGIN is used for the "boot to SARAM" bootloader mode */

    BEGIN : origin = 0x000000, length = 0x000002
    RAMM0 : origin = 0x000123, length = 0x0002DD
    RAMD0 : origin = 0x00B000, length = 0x000800
    RAMLS0 : origin = 0x008000, length = 0x000800
    RAMLS1 : origin = 0x008800, length = 0x000800
    RAMLS2 : origin = 0x009000, length = 0x000800
    RAMLS3 : origin = 0x009800, length = 0x000800
    RAMLS4 : origin = 0x00A000, length = 0x000800
    RESET : origin = 0x3FFFC0, length = 0x000002

    PAGE 1 :

    BOOT_RSVD : origin = 0x000002, length = 0x000121 /* Part of M0, BOOT rom will use this for stack */
    RAMM1 : origin = 0x000400, length = 0x0003F8 /* on-chip RAM block M1 */
    // RAMM1_RSVD : origin = 0x0007F8, length = 0x000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    RAMD1 : origin = 0x00B800, length = 0x000800

    RAMLS5 : origin = 0x00A800, length = 0x000800

    RAMGS0 : origin = 0x00C000, length = 0x001000
    RAMGS1 : origin = 0x00D000, length = 0x001000
    RAMGS2 : origin = 0x00E000, length = 0x001000
    RAMGS3 : origin = 0x00F000, length = 0x001000
    RAMGS4 : origin = 0x010000, length = 0x001000
    RAMGS5 : origin = 0x011000, length = 0x001000
    RAMGS6 : origin = 0x012000, length = 0x001000
    RAMGS7 : origin = 0x013000, length = 0x001000
    RAMGS8 : origin = 0x014000, length = 0x001000
    RAMGS9 : origin = 0x015000, length = 0x001000
    RAMGS10 : origin = 0x016000, length = 0x001000
    RAMGS11 : origin = 0x017000, length = 0x001000
    RAMGS12 : origin = 0x018000, length = 0x001000
    RAMGS13 : origin = 0x019000, length = 0x001000
    RAMGS14 : origin = 0x01A000, length = 0x001000
    //RAMGS15 : origin = 0x01B000, length = 0x001000
    RAMGS15 : origin = 0x01B000, length = 0x000FF8

    //RAMGS11 : origin = 0x017000, length = 0x000FF8
    // RAMGS11_RSVD : origin = 0x017FF8, length = 0x000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */

    CANA_MSG_RAM : origin = 0x049000, length = 0x000800
    CANB_MSG_RAM : origin = 0x04B000, length = 0x000800
    }


    SECTIONS
    {
    codestart : > BEGIN, PAGE = 0
    // .text : >> RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0
    .text : >> RAMGS0 | RAMGS1 | RAMGS2 | RAMGS3 | RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8 | RAMGS9, ALIGN(8)
    .cinit : > RAMM0, PAGE = 0
    .switch : > RAMM0, PAGE = 0
    .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */

    .stack : > RAMM1, PAGE = 1

    #if defined(__TI_EABI__)
    .bss : > RAMLS5, PAGE = 1
    .bss:output : > RAMLS3, PAGE = 0
    .init_array : > RAMM0, PAGE = 0
    .const : > RAMLS5, PAGE = 1
    .data : > RAMLS5, PAGE = 1
    .sysmem : > RAMLS5, PAGE = 1
    #else
    .pinit : > RAMM0, PAGE = 0
    // .ebss : > RAMLS5, PAGE = 1
    .ebss : >> RAMGS9 | RAMGS10 | RAMGS11 | RAMGS12 | RAMGS13 | RAMGS14 | RAMGS15 PAGE = 1
    .econst : > RAMLS5, PAGE = 1
    .esysmem : > RAMLS5, PAGE = 1
    #endif

    ramgs0 : > RAMGS0, PAGE = 1
    ramgs1 : > RAMGS1, PAGE = 1

    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
    .TI.ramfunc : {} > RAMM0, PAGE = 0
    #else
    ramfuncs : > RAMM0 PAGE = 0
    #endif
    #endif

    /* The following section definitions are for SDFM examples */
    // Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111
    // Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222
    // Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333
    // Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444
    // Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333
    }

    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */

  • Hi Paul,

    I don't see an issue with your linker cmd file. There is enough space that can be accommodated in the GS RAM. Did you face this issue with the LSRAM that made you to update it to GSRAM?

    Is it possible to share your project for more analysis?

    Thanks

    Aswin

  • Yes exactly , had the same issue with LSRAM and tried GSRAM as an experiment.

    CMCScannerPlusPlus.zip

    CMCScannerPlusPlus.zip  contains the project.

  • Hi Paul,

    I have checked your project properties. The project is configured to use the coffabi format in the compiler flags. We are now supporting EABI format.

    When i replaced the compiler flag from --abi=coffabi   to  --abi=eabi, i am able to resolve the linker cmd issue but was having issues with otherfiles in the project. 

    Please update the compiler flag to eabi format and rebuild your project.

    Thanks

    Aswin