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.

TMS320F28335: Out of Memory Issue.

Part Number: TMS320F28335

Hi There!

I am a TMS320F28335 user. I need more memory.
There is too much '.ebss' data, so RAM block L0 ~ L7 is integrated, but it is still not enough.
Currently, 95% of the RAM area is used, and there are still variables that I have not declared.
In this case, is there an area that I can use instead? help me plz..

ex. SRAM_DATA or ZONE7? (Neither in use)

  • Hello,

    Can you please provide me with the contents of your linker command file (.cmd) so I can see how the memory is being allocated? Do you have an idea of how much memory you need to use in total for your project?

    Best regards,

    Omer Amir

  • MEMORY {
    PAGE 0:     /* Program Memory */
                /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
       //RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */
       //RAML1       : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */
       //RAML2       : origin = 0x00A000, length = 0x001000     /* on-chip RAM block L2 */
       //RAML3       : origin = 0x00B000, length = 0x001000     /* on-chip RAM block L3 */
       //RAML4       : origin = 0x00C000, length = 0x001000     /* on-chip RAM block L4 */
       //RAML5       : origin = 0x00D000, length = 0x001000     /* on-chip RAM block L5 */
       //RAML6       : origin = 0x00E000, length = 0x001000     /* on-chip RAM block L6 */
       //RAML7       : origin = 0x00F000, length = 0x001000     /* on-chip RAM block L7 */
       RAML        : origin = 0x008000, length = 0x008000     /* on-chip RAM block L0-L7 */
       
       FLASHH      : origin = 0x300000, length = 0x008000     /* on-chip FLASH */
       FLASHG      : origin = 0x308000, length = 0x008000     /* on-chip FLASH */
       FLASHF      : origin = 0x310000, length = 0x008000     /* on-chip FLASH */
       FLASHE      : origin = 0x318000, length = 0x008000     /* on-chip FLASH */
       FLASHD      : origin = 0x320000, length = 0x008000     /* on-chip FLASH */
       FLASHC      : origin = 0x328000, length = 0x008000     /* on-chip FLASH */
       FLASHB      : origin = 0x330000, length = 0x008000     /* on-chip FLASH */
       FLASHA      : origin = 0x338000, length = 0x007F80     /* on-chip FLASH */
       CSM_RSVD    : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
       
       BEGIN       : origin = 0x33FFF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
       
       CSM_PWL     : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */
       OTP         : origin = 0x380400, length = 0x000400     /* on-chip OTP */
       ADC_CAL     : origin = 0x380080, length = 0x000009     /* ADC_cal function in Reserved memory */
       
       IQTABLES    : origin = 0x3FE000, length = 0x000b50     /* IQ Math Tables in Boot ROM */
       IQTABLES2   : origin = 0x3FEB50, length = 0x00008c     /* IQ Math Tables in Boot ROM */
       FPUTABLES   : origin = 0x3FEBDC, length = 0x0006A0     /* FPU Tables in Boot ROM */
       ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */
       RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */
       VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */
       
       ZONE7A      : origin = 0x0200000, length = 0x00FC00    /* XINTF zone 7 - program space */
       ZONE7B      : origin = 0x20FC00, length = 0x000400     /* XINTF zone 7 - data space */
       
    PAGE 1 :    /* Data Memory */
                /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
                /* Registers remain on PAGE1                                                  */
       BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
       RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */
       RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
       
       ZONE0       : origin = 0x004000, length = 0x001000     /* XINTF zone 0 */
       ZONE6       : origin = 0x100000, length = 0x100000     /* XINTF zone 6 */
    }
    
    /* Allocate sections to memory blocks.
       Note: codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
                       execution when booting to flash
             ramfuncs  user defined section to store functions that will be copied from Flash into RAM
    */
    
    SECTIONS {
    
       /* Allocate program areas: */
       .cinit              : > FLASHA      PAGE = 0
       .pinit              : > FLASHA,     PAGE = 0
       .text               : > FLASHA      PAGE = 0
       codestart           : > BEGIN       PAGE = 0                     
       ramfuncs            : LOAD = FLASHD, RUN = RAML, 
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             PAGE = 0
       csmpasswds          : > CSM_PWL     PAGE = 0
       csm_rsvd            : > CSM_RSVD    PAGE = 0
       
       /* Allocate uninitalized data sections: */
       .stack              : > RAMM0       PAGE = 1
       .ebss               : > RAML       PAGE = 0
       .esysmem            : > RAMM1       PAGE = 1
       
       /* Initalized sections go in Flash */
       /* For SDFlash to program these, they must be allocated to page 0 */
       .econst             : > FLASHA      PAGE = 0
       .switch             : > FLASHA      PAGE = 0   
       
       /* Allocate IQ math areas: */
       IQmath              : > FLASHC      PAGE = 0                  /* Math Code */
       IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD 
       
       /* Uncomment the section below if calling the IQNexp() or IQexp()
          functions from the IQMath.lib library in order to utilize the 
          relevant IQ Math table in Boot ROM (This saves space and Boot ROM
          is 1 wait-state). If this section is not uncommented, IQmathTables2
          will be loaded into other memory (SARAM, Flash, etc.) and will take
          up space, but 0 wait-state is possible.
       */
       
       /*
       IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD 
       {
                  IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)
       }
       */
       
       FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
       
       /* Allocate DMA-accessible RAM sections: */
       DMARAML4         : > RAML,     PAGE = 0
       DMARAML5         : > RAML,     PAGE = 0
       DMARAML6         : > RAML,     PAGE = 0
       DMARAML7         : > RAML,     PAGE = 0
       
       /* Allocate 0x400 of XINTF Zone 7 to storing data */
       ZONE7DATA        : > ZONE7B,    PAGE = 0
       
       /* .reset is a standard section used by the compiler.  It contains the */
       /* the address of the start of _c_int00 for C Code.   /*
       /* When using the boot ROM this section and the CPU vector */
       /* table is not needed.  Thus the default type is set here to  */
       /* DSECT  */ 
       .reset              : > RESET,      PAGE = 0, TYPE = DSECT
       vectors             : > VECTORS     PAGE = 0, TYPE = DSECT
       
       /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
       .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD
    }
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

    Hello

    I upload my "28335.cmd" file.

    Currently, in the cmd file, RAML0 - RAML7 areas are integrated and used as RAML.
    (95% of RAML memory area is in use)
    I would like to use about 120% of the RAML area when calculated roughly.

    My product is using ZONE0, ZONE6 and ZONE7 is unused.

    In this case, is there a way to fix it by modifying the cmd file without changing the CPU or changing other H/W such as SRAM?

  • Part Number: TMS320F28335

    Hi There!

    I am a TMS320F28335 user. I need more memory.
    There is too much '.ebss' data, so RAM block L0 ~ L7 is integrated, but it is still not enough.
    Currently, 95% of the RAM area is used, and there are still variables that I have not declared.
    In this case, is there an area that I can use instead? help me plz..

    ex. SRAM_DATA or ZONE7? (Neither in use)

  • Hi,

    We have forwarded your query to an expert. You will hear a response soon.

    Thanks,

    Veena

  • Hi, 

    Thanks for your sincere answers to my questions.
    Two questions have been posted, can you please answer the other side and delete this post?
    I don't know how to delete this post....

    ↓This is other post.

    e2e.ti.com/.../tms320f28335-out-of-memory-issue

  • Let me close this thread instead of deleting.

    This is a duplicate of e2e.ti.com/.../tms320f28335-out-of-memory-issue

    Thanks,

    Veena

  • Hello,

    There is a limit to how much RAM can be used on-chip. Unfortunately, if you need 120% of RAML this much memory is not available in RAM (the amount of RAM on the F28335 device is listed in the datasheet as 34K x 16, what you are asking for is approximately 39K x 16). There are a few different solutions:

    1. Optimize as much of the memory as you can, share variables, etc.
    2. Use Flash (data access may be slower, but you will have sufficient memory to store your variables; this also should not be too much of an issue since you are already using Flash for the rest of your program)
    3. Use some sort of external memory using the available communication protocols on the F28335 device
    4. Use a C2000 device with more memory

    I understand if it's not realistic to change out the device, but the other solutions should work. If you want to just use the RAM on-chip without compromising what you're storing on it, then it is not possible to fit more data on it.

    Best regards,

    Omer Amir

  • Hello, Thank you for your reply.
    Your comment has many similarities with our team's previous review.

    1. Optimize memory -> This is an effort but seems to have limitations
    3. Use of external memory -> Our H/W team is reviewing
    4. Use another C2000 CPU -> Our S/W team is reviewing

    Currently, 4 is emerging as the highest option, but we are struggling with price issues and free space on the board.
    However, since your opinion number 2 came to mind as a new option, I think it is necessary to review 2.

    Any additional questions you would like to ask :
    Since our product does not use Xintf Zone7, I wanted to ask if it would be possible to write the memory, but is it impossible?

  • Hello,

    Yes, I have confirmed with another expert that Zone7 is not accessible by the user as it is reserved for XINTF. Trying to access it will access the external device, this memory cannot be used as additional RAM for data.

    Best regards,

    Omer Amir

  • Hi,


    Thank you for your confirmation.
    I'll try the TMS320F28335 flash memory.
    This issue has been resolved and I think your reply has been helpful to me.
    I'll open a new thread if any further questions arise.

    bye till then