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.

How to increase progRAM length in C2000 TMS320F28035

Other Parts Discussed in Thread: TMS320F28035, CONTROLSUITE

Hi,

I am using following .CMD code for memory allocation for C2000 TMS320F28035 microcontroller  and I am facing problem of less available RAM memory for my program code. I tried to increase  progRAM by reducing dataRAM with same size, but it gives error. Please help me by modifying some statements of following code to increase memory size for program RAM. Or suggest me literature to achieve this task.

Thanks,

Rupesh 

PAGE 0:
progRAM : origin = 0x008000, length = 0x001000  /* on-chip RAM (L0-L2)*/
OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */
FLASHH : origin = 0x3E8000, length = 0x002000 /* on-chip FLASH */
FLASHG : origin = 0x3EA000, length = 0x002000 /* on-chip FLASH */
FLASHF : origin = 0x3EC000, length = 0x002000 /* on-chip FLASH */
FLASHE : origin = 0x3EE000, length = 0x002000 /* on-chip FLASH */
FLASHD : origin = 0x3F0000, length = 0x002000 /* on-chip FLASH */
FLASHC : origin = 0x3F2000, length = 0x002000 /* on-chip FLASH */
FLASHA : origin = 0x3F6000, length = 0x001F80 /* on-chip FLASH */
CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
BEGIN : origin = 0x3F7FF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */
CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */

IQTABLES : origin = 0x3FE000, length = 0x000B50 /* IQ Math Tables in Boot ROM */
IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* IQ Math Tables in Boot ROM */
IQTABLES3 : origin = 0x3FEBDC, length = 0x0000AA /* IQ Math Tables in Boot ROM */

BOOTROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */
RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */
VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */

PAGE 1 :
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 */
dataRAM : origin = 0x009000, length = 0x001000 /* data RAM (L3) */
FLASHB : origin = 0x3F4000, length = 0x002000 /* on-chip FLASH */

CLA_CPU_MSGRAM : origin = 0x001480, length = 0x000080 /* CLA-R/W, CPU-R message RAM */
CPU_CLA_MSGRAM : origin = 0x001500, length = 0x000080 /* CPU-R/W, CLA-R message 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 = progRAM,
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 : > dataRAM, PAGE = 1
.esysmem : > dataRAM, 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 : > FLASHA PAGE = 0 /* Math Code */
IQmathTables : > IQTABLES PAGE = 0, TYPE = NOLOAD /* Math Tables In ROM */

Cla1ToCpuMsgRAM : > CLA_CPU_MSGRAM PAGE = 1
CpuToCla1MsgRAM : > CPU_CLA_MSGRAM PAGE = 1

.reset : > RESET, PAGE = 0, TYPE = DSECT
vectors : > VECTORS PAGE = 0, TYPE = DSECT


/* 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)

}
*/
/* Uncomment the section below if calling the IQNasin() or IQasin()
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.
*/
/*
IQmathTables3 : > IQTABLES3, PAGE = 0, TYPE = NOLOAD
{

IQmath.lib<IQNasinTable.obj> (IQmathTablesRam)

}
*/

}

SECTIONS
{
Net_terminals: > dataRAM,PAGE = 1
Controller: > dataRAM,PAGE = 1
DLOG: > dataRAM,PAGE = 1
}

  • Please help me regarding above issue?

  • Hi!

    I would advise you to download controlSUITE from TI.com and to take the file 28035_RAM_lnk.cmd from the some example project for F28035.

    Igor

  • You did'nt post the error message itself.

    The error message usually tells you how many memory would be needed to place a section. This way you can adjust your progRAM and dataRAM, as Long as there is sufficient physical RAM available.

     

     

  • rupesh wandhare said:
    I tried to increase  progRAM by reducing dataRAM with same size, but it gives error.

    What is the error?

  • I have changed following statements to get additional 0x000100 space for my program code in above cmd file :

    --------------------------------

    progRAM    : origin = 0x008000, length = 0x001100      /* it was 0x008000 and 0x001000      /*  on-chip RAM (L0-L2)*/

    dataRAM    : origin = 0x009100, length = 0x000F00      /* it was 0x009000 and 0x001000        /* data RAM (L3) */

    ---------------------------------

    And I am getting following error message in console window :

    ---------------------------------

    "D:/ShiftToLaptopsFolder/TI development and study kits/Renewable Energy Kits/TI_F28xxx_SysSW/Renewable/F28035_FLASH_Renewable.CMD", line 107: error:
    run placement fails for object ".ebss", size 0x77a (page 1). Available
    ranges:
    dataRAM size: 0xf00 unused: 0x700 max hole: 0x700
    error: errors encountered during linking; "D:/ShiftToLaptopsFolder/TI
    development and study kits/Renewable Energy
    Kits/TI_F28xxx_SysSW/Renewable/F2803x_FLASH/Renewable.out" not built

    ---------------------------------------

  • Hi!

    You decreased the lenght of dataRAM up to 0x000F00 (it was 0x001000). Why? It should seem the problem is here.

    Regards, Igor

  • Hello,

    I have referred the datasheet of TMS320F28035 (pg. 21) for memory map. There is no RAM in address section 0x00A000 to 0x3D7800  (This space is reserved). Hence I thought about keeping dataRAM space upto 0x00A000 (i.e. 0x009100+0x000F00) in earlier code. Please correct me if  I am wrong.

    I tried following also :

    progRAM    : origin = 0x008000, length = 0x001100  

    dataRAM    : origin = 0x009100, length = 0x001000 

    This time, no error is displaying, but whenever I tried to run controller, it immediately gets halt at following address 

    0x3FF599:   7625        ESTOP0

    without any error, nothing. 

    What could be the problem? Please suggest.

    Regards,

    Rupesh

  • Hi!

    I'm not assured about an ability of division of the memory areas L0...L3.

    Attempt following:

    progRAM    : origin = 0x008C00, length = 0x001400  

    dataRAM    : origin = 0x008000, length = 0x000C00

    Regards, Igor 

  • The error message tells you:

    (1) the overall dataRAM size is 0xF00.

    (2) at the time the linker tried to place the global variables (".ebss") into dataRAM, it was already loaded with 0x800 words (0xF00-0x800 = 0x700).

    (3) the size of ".ebss" is 0x77A, which does not fit into the remaining space of 0x700.

    You can find out, what sections have consumed the 0x800 words by looking into the linker cmd file. Because it is a size of 2K I would speculate that you defines a stacksize of 2K and placed it into dataRAM.  Try to reduce this size.

    As a general recommendation: It is time to think about using FLASH for the code. The RAM size is indeed limited ( 8K words) and real projects usually need more code space.

      

     

     

     

  • ESTOP0 is a software breakpoint.  This is not related at all to your first problem.

    Please tell us to which function (or address) the ESTOP0 instruction belongs to.

     

     

  • Dear Igor,

    I tried with 

    progRAM    : origin = 0x008C00, length = 0x001400  

    dataRAM    : origin = 0x008000, length = 0x000C00

    but it didnt work

    thanks for your concern

  • Dear Frank,

    Thanks for many hints.

    But I dont understand where this 0x800 space is going.

    I am programming in flash only. But I have two time critical subroutines which I wanted to run from RAM hence copying this subroutine code to RAM before enters into interrupts.

    I guess stack is at different space as that of dataRAM, following are section allocations for your ready reference:

    ------------------------

    SECTIONS
    {
    /* Allocate program areas: */
    .cinit : > FLASHA, PAGE = 0
    .pinit : > FLASHA, PAGE = 0
    .text : > FLASHA, PAGE = 0

    codestart : > BEGIN PAGE = 0
    ramfuncs : LOAD = FLASHD,
    RUN = progRAM,
    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 : > dataRAM, PAGE = 1
    .esysmem : > dataRAM, 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 : > FLASHA PAGE = 0 /* Math Code */
    IQmathTables : > IQTABLES PAGE = 0, TYPE = NOLOAD /* Math Tables In ROM */

    Cla1ToCpuMsgRAM : > CLA_CPU_MSGRAM PAGE = 1
    CpuToCla1MsgRAM : > CPU_CLA_MSGRAM PAGE = 1

    .reset : > RESET, PAGE = 0, TYPE = DSECT
    vectors : > VECTORS PAGE = 0, TYPE = DSECT

    ------------------------

    Anyway, thanks a lot for your concerns. I had used an array of bit longer size (200) for debugging through "graph". I have reduced its size to (120). Now my very early code as below is working and it solved my problem of a 'need of longer progRAM'

      progRAM    : origin = 0x008000, length = 0x001100 

    dataRAM    : origin = 0x009100, length = 0x000F00 

     Thanks,

    Rupesh


  • Sorry!

    At this case I would attach to Frank: "It is time to think about using FLASH for the code". It's right.

    Regards,

    Igor