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.

TMS320F28379D: TMS320F28379D

Part Number: TMS320F28379D

Afternoon, 

My error reads as below:

"../2837xD_FLASH_lnk_cpu1.cmd", line 89: 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. run placement with alignment/blocking fails for section ".ebss" size 0x1a67 page 1. Available memory ranges:
RAMLS5 size: 0x800 unused: 0x658 max hole: 0x648
RAMGS0 size: 0x1000 unused: 0x1000 max hole: 0x1000
RAMGS1 size: 0x1000 unused: 0x1000 max hole: 0x1000
error #10010: errors encountered during linking; "NG_Initial_V2.7_FLASH.out" not built

I seem to have a common problem. I have spent a couple of days reading through the manual on how to allocate areas of memory either by dividing or combining.

I have tried on the FLASH memory (FLASHJ) and i seem to be able to compile but the program grinds to a halt displaying NaN on all variables on the expressions page. 

When i try it on RAM i encounter the above error no matter how many sections of RAM i add. Below is the linker file for your consideration please.

  • Hi Edwin,

    The memory section added for section ".ebss" is not enough to hold the data. You need to add more memory for this section.

    Can you please add more GS ram into the ".ebss" section and try to build it and see.

    Eg - .ebss               : >> RAMLS5 | RAMGS0 | RAMGS1 |  RAMGS2,    PAGE = 1

    If this is still not enough, you can add more GS RAMs. You can also have a look at the .map file and see how much memory is required for this section.

    Thanks

    Aswin

  • Hi Aswin, 

    I have added more GS RAMs (.ebss            : >> RAMLS5| RAMGS0 | RAMGS1 | RAMGS2 | RAMGS3 | RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7,       PAGE = 1) and i still end up with the error.

    On checking the .map file I see the data below but unsure as to how to check the memory required

    RAMLS5 size: 0x800 unused: 0x658 max hole: 0x648
    RAMGS0 size: 0x1000 unused: 0x1000 max hole: 0x1000
    RAMGS1 size: 0x1000 unused: 0x1000 max hole: 0x1000
    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

    I have a data structure shown below that am sending to terminal.

    Am able to send the first 3 Variables namely (arrayVa, arrayVb and arrayVc) with no issues with  .ebss               : >> RAMLS5 | RAMGS0 | RAMGS1 |  RAMGS2,    PAGE = 1. But, when i increase to additional variables namely  arrayIa,  arrayIb and  arrayIc i run into the memory problem shown above even after i increase the GS RAMs

    struct Data_struct {
    float arrayVa[500]; // Array to hold Va readings
    float arrayVb[500]; // Array to hold Vb readings
    float arrayVc[500]; // Array to hold Vc readings

    float arrayIa[500];
    float arrayIb[500];
    float arrayIc[500];

    //float arrayVdc[500];
    //float arrayVnx[500];

    //float arrayId[500];
    //float arrayIq[500];

    //float arrayVdSS[500];
    //float arrayVqSS[500];

    //float arrayV0SS[500];

    //float arrayDCYa[500];
    //float arrayDCYb[500];
    //float arrayDCYc[500];

    }data;

  • Hi Edwin,

    Is it possible to share the project as zip format in this thread. I can further debug them.

    When i try it on RAM i encounter the above error no matter how many sections of RAM i add.

    Also for a clarification, are you building the example in RAM/FLASH config?

    And in which config did you face the error?

    Can you share the .map file for further debug?

    Thanks

    Aswin

  • Hi Aswin, 

    Am building in FLASH config as per the instructions of the main author of the project

    I have attached the project in zip. Please see attached


    NG_Initial_V2.7_FLASH_Master_working.zip

  • I have tried to attach the map file, not sure if it has come through.

  • Edwin,

    I was able to build the example without any errors in cpu1_flash config.

    https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/171/NG_5F00_Initial_5F00_V2.7_5F00_FLASH.out

    Did you add all the required arrays in this project?

    If not please attach the example which has errors.

    Thanks

    Aswin

  • Please see attached, i had turned the variables in the array to integers hence there was no error. I have turned them back to floats as intended and you'll notie the error now
    NG_Initial_V2.7_FLASH_Master.zip

  • Hi Edwin,

    Can you combine the GSRAMs as new entry and replace them in the .ebss section.


    MEMORY
    {
    PAGE 0 : /* Program Memory */
    /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */
    /* BEGIN is used for the "boot to Flash" 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
    RAMLS2 : origin = 0x009000, length = 0x000800
    RAMLS3 : origin = 0x009800, length = 0x000800
    RAMLS4 : origin = 0x00A000, length = 0x000800
    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 */


    PAGE 1 : /* Data Memory */
    /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */

    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 */
    RAMD1 : origin = 0x00B800, length = 0x000800

    RAMLS5 : origin = 0x00A800, length = 0x000800

    RAMGS0 : origin = 0x00C000, length = 0x001000
    RAMGS1 : origin = 0x00D000, length = 0x001000
    RAMGS2_5 : origin = 0x00E000, length = 0x004000
    // 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. */

    CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400
    CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400


    FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ // USED FOR DCL

    }

    SECTIONS
    {
    /* Allocate program areas: */
    .cinit : > FLASHB, PAGE = 0, ALIGN(4)
    .pinit : > FLASHB, PAGE = 0, ALIGN(4)
    .text : >> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0, ALIGN(4)


    codestart : > BEGIN PAGE = 0, ALIGN(4)

    //DLC
    dclfuncs : > FLASHN, PAGE = 1
    .scratchpad : > FLASHN, PAGE = 1
    Cla1Prog : > FLASHN, PAGE = 1
    dcl32funcs : > FLASHN, PAGE = 1

    /* Allocate uninitalized data sections: */
    .stack : > RAMD1 PAGE = 1

    .ebss : > RAMGS2_5, PAGE = 1
    //.ebss : >> RAMLS5| RAMGS0 | RAMGS1 | RAMGS2 | RAMGS3 | RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8 | RAMGS9 | RAMGS10 | RAMGS11 | RAMGS12 | RAMGS13, PAGE = 1
    //.ebss : >> FLASHN, PAGE = 1, ALIGN(4)

    .esysmem : > RAMLS5 PAGE = 1

    .cio : > RAMGS6 PAGE = 1, ALIGN(4) // Edwin added this to counteract ".cio without a SECTIONS specification" warning

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

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


    Filter_RegsFile : > RAMGS0, PAGE = 1

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

    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
    .TI.ramfunc : {} LOAD = FLASHD,
    RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3 |RAMLS4 | RAMGS14 |RAMGS15,
    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 = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
    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 definitions are required when using the IPC API Drivers */
    GROUP : > CPU1TOCPU2RAM, PAGE = 1
    {
    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX
    }

    GROUP : > CPU2TOCPU1RAM, PAGE = 1
    {
    GETBUFFER : TYPE = DSECT
    GETWRITEIDX : TYPE = DSECT
    PUTREADIDX : TYPE = DSECT
    }

    }

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

    Please try it from your side and see if you are still having the issue.

    Thanks

    Aswin

  • Hi Aswin ,

    Works exactly how i want it to. Thank you very much and this resolves my issue

  • Hi Aswin,

    Carrying on with this thread, i would like to increase the variables in the array to as shown in the attached. I've run into the same issue. Please can you have a look?

     1805.NG_Initial_V2.7_FLASH_Master.zip

  • Hi Aswin, 

    All issues resolved. Ignore my last message. 

    Kind regards

    Edwin

  • Hi Edwin,

    Good to hear that issue is resolved. Hence closing this thread.

    Regards

    Aswin