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.

CCS/TMS320F28379D: Program will not fit into available memory. ".bss_cla" size 0x82e page 0.

Part Number: TMS320F28379D
Other Parts Discussed in Thread: C2000WARE

Tool/software: Code Composer Studio

Hi,

I am using '2837xD_FLASH_CLA_lnk_cpu1.cmd' linker file to run my application code in which i have created a float buffer array inside a CLA to monitor a sine wave. The problem is that i am getting following error

" "C:/ti/C2000Ware_1_00_06_00_Software/device_support/f2837xd/common/cmd/2837xD_FLASH_CLA_lnk_cpu1.cmd", line 164: error #10099-D: program will not fit into available memory.  run placement with alignment/blocking fails for section ".bss_cla" size 0x82e page 0."

I searched the forum and found multiple suggestions to merge RAM but for CLA, if i am not wrong, i dont have other options than using RAMLSx? I tried to merge RAMLS0 and RAMLS1, but no result. Please guide accordingly. Here is my linker file.

 

//Linker File

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

   BEGIN               : origin = 0x080000,   length = 0x000002
   RAMM0               : origin = 0x000122,   length = 0x0002DE
   RAMD0               : origin = 0x00B000,   length = 0x000800
   RAMLS0              : origin = 0x008000,   length = 0x000800
   RAMLS1              : origin = 0x008800,   length = 0x000800   
   /* RAMLS4             : origin = 0x00A000, length = 0x000800 */
   /* RAMLS5           : origin = 0x00A800, length = 0x000800 */
   RAMLS4_5         : origin = 0x00A000,   length = 0x001000
   
   RAMGS14          : origin = 0x01A000,   length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
   RAMGS15          : origin = 0x01B000,   length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
   RESET               : origin = 0x3FFFC0,   length = 0x000002

   /* Flash sectors */
   FLASHA           : origin = 0x080002,   length = 0x001FFE    /* on-chip Flash */
   FLASHB           : origin = 0x082000,   length = 0x002000    /* on-chip Flash */
   FLASHC           : origin = 0x084000,   length = 0x002000    /* on-chip Flash */
   FLASHD           : origin = 0x086000,   length = 0x002000    /* on-chip Flash */
   FLASHE           : origin = 0x088000,   length = 0x008000    /* on-chip Flash */
   FLASHF           : origin = 0x090000,   length = 0x008000    /* on-chip Flash */
   FLASHG           : origin = 0x098000,   length = 0x008000    /* on-chip Flash */
   FLASHH           : origin = 0x0A0000,   length = 0x008000    /* on-chip Flash */
   FLASHI           : origin = 0x0A8000,   length = 0x008000    /* on-chip Flash */
   FLASHJ           : origin = 0x0B0000,   length = 0x008000    /* on-chip Flash */
   FLASHK           : origin = 0x0B8000,   length = 0x002000    /* on-chip Flash */
   FLASHL           : origin = 0x0BA000,   length = 0x002000    /* on-chip Flash */
   FLASHM           : origin = 0x0BC000,   length = 0x002000    /* on-chip Flash */
   FLASHN           : origin = 0x0BE000,   length = 0x002000    /* on-chip Flash */

PAGE 1 :

   BOOT_RSVD        : origin = 0x000002,   length = 0x000120     /* Part of M0, BOOT rom will use this for stack */
   RAMM1            : origin = 0x000400,   length = 0x000400     /* on-chip RAM block M1 */

   RAMLS2              : origin = 0x009000,   length = 0x000800
   RAMLS3              : origin = 0x009800,   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     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
   RAMGS13          : origin = 0x019000,   length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */

   EMIF1_CS0n       : origin = 0x80000000, length = 0x10000000
   EMIF1_CS2n       : origin = 0x00100000, length = 0x00200000
   EMIF1_CS3n       : origin = 0x00300000, length = 0x00080000
   EMIF1_CS4n       : origin = 0x00380000, length = 0x00060000
   EMIF2_CS0n       : origin = 0x90000000, length = 0x10000000
   EMIF2_CS2n       : origin = 0x00002000, length = 0x00001000

   CLA1_MSGRAMLOW   : origin = 0x001480,   length = 0x000080
   CLA1_MSGRAMHIGH  : origin = 0x001500,   length = 0x000080
}


SECTIONS
{
   /* Allocate program areas: */
   .cinit           : > FLASHB      PAGE = 0, ALIGN(4)
   .pinit           : > FLASHB,     PAGE = 0, ALIGN(4)
   .text            : > FLASHB      PAGE = 0, ALIGN(4)
   codestart        : > BEGIN       PAGE = 0, ALIGN(4)

   /* Allocate uninitalized data sections: */
   .stack           : > RAMM1        PAGE = 1
   .ebss            : > RAMLS2       PAGE = 1
   .esysmem         : > RAMLS2       PAGE = 1

   /* Initalized sections go in Flash */
   .econst          : > FLASHB      PAGE = 0, ALIGN(4)
   .switch          : > FLASHB      PAGE = 0, ALIGN(4)

   .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */

   Filter_RegsFile  : > RAMGS0,       PAGE = 1
   
   .em2_cs0         : > EMIF2_CS0n, PAGE = 1
   .em2_cs2         : > EMIF2_CS2n, PAGE = 1

    /* CLA specific sections */
   Cla1Prog         : LOAD = FLASHD,
                      RUN = RAMLS4_5,
                      LOAD_START(_Cla1funcsLoadStart),
                      LOAD_END(_Cla1funcsLoadEnd),
                      RUN_START(_Cla1funcsRunStart),
                      LOAD_SIZE(_Cla1funcsLoadSize),
                      PAGE = 0, ALIGN(4)

   CLADataLS0        : > RAMLS0, PAGE=0
   CLADataLS1        : > RAMLS1, PAGE=0

   Cla1ToCpuMsgRAM  : > CLA1_MSGRAMLOW,   PAGE = 1
   CpuToCla1MsgRAM  : > CLA1_MSGRAMHIGH,  PAGE = 1

#ifdef __TI_COMPILER_VERSION__
   #if __TI_COMPILER_VERSION__ >= 15009000
    .TI.ramfunc : {} LOAD = FLASHD,
                         RUN = RAMD0,
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_SIZE(_RamfuncsLoadSize),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         RUN_SIZE(_RamfuncsRunSize),
                         RUN_END(_RamfuncsRunEnd),
                         PAGE = 0, ALIGN(4)
   #else
   ramfuncs         : LOAD = FLASHD,
                      RUN = RAMD0,
                      LOAD_START(_RamfuncsLoadStart),
                      LOAD_SIZE(_RamfuncsLoadSize),
                      LOAD_END(_RamfuncsLoadEnd),
                      RUN_START(_RamfuncsRunStart),
                      RUN_SIZE(_RamfuncsRunSize),
                      RUN_END(_RamfuncsRunEnd),
                      PAGE = 0, ALIGN(4)
   #endif
#endif

   /* The following section definition 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

#ifdef CLA_C
   /* CLA C compiler sections */
   //
   // Must be allocated to memory the CLA has write access to
   //
   CLAscratch       :
                     { *.obj(CLAscratch)
                     . += CLA_SCRATCHPAD_SIZE;
                     *.obj(CLAscratch_end) } >  RAMLS1,  PAGE = 0

   .scratchpad      : > RAMLS1,       PAGE = 0
   .bss_cla            : > RAMLS0        PAGE = 0
   .const_cla        :  LOAD = FLASHB,
                       RUN = RAMLS1,
                       RUN_START(_Cla1ConstRunStart),
                       LOAD_START(_Cla1ConstLoadStart),
                       LOAD_SIZE(_Cla1ConstLoadSize),
                       PAGE = 0
#endif //CLA_C
}

  • Hi,

    CLA RAM has access to LS RAMs. But you need to configure the Memconfig module accordingly. You can refer to the to CLA example available in C2000ware on how CLA is given owner permissions for LS RAMs.

    You also need to make sure that those LS RAMs are not being used by other non-CLA related sections.

    Regards,,

    Veena

  • Hi Veena,

    Thanks for the prompt response. I have configured the LS RAMs accordingly as given in examples using Memconfig module but still no result. Here i have attached the screenshot.

  • Hi,

    Are you saying even after merging LS0 and LS1, you still get the error which says unable to allocate memory?

    You can look at the .map file generated by the CCS, check the actual size of the section, and see the size of the unused memory in the LS RAMs and allocate accordingly.

    Regards,

    Veena

  • Hi Veena,

    Thanks for the feedback. There was a mistake in merging RAMLS0 and RAMLS1 which I found out in .map file. Thanks a lot

    Regards

    Hasan