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.

TMS470MF03107: 程序编译后所需RAM空间0x5178字节,大于单一RAM片区0x08000000-0x08003FFF的大小,基于当前内存空间资源,该如何处理才能满足内存需求?

Part Number: TMS470MF03107

Hi,Dear TI Engineer friends!

The following content I put in Chinese for description convenience.If you are not good at Chinese,or have other considerations,please let me know,thx! 

以下是我遇到问题的具体描述:

        我们的系统程序是基于TMS470MF03107开发的。本系统程序集成后,RAM所需总RAM空间为0x5178字节。实际芯片内存资源如下图所示:

      

             当前链接文件sys_link.cmd代码如下:

            

/*----------------------------------------------------------------------------*/
/* sys_link.cmd */
/* */
/* (c) Texas Instruments 2011, All rights reserved. */
/* */

/* USER CODE BEGIN (0) */

/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Linker Settings */

-l rtsv7M3_T_be_eabi.lib

--retain="*(.intvecs)"
--retain="*(.vim_table)"

/* USER CODE END */

/*----------------------------------------------------------------------------*/
/* Memory Map */

MEMORY
{

VECTORS (X) : origin=0x00004000 length=0x00000040
VIM_TABLE (X): origin=0x00004040 length=0x000000C0
//FLASH0 (RX) : origin=0x00004100 length=0x0003BF00 //20130516
FLASH0 (RX) : origin=0x00004200 length=0x0003BDFF //0x0003BE00//20140318
//FLASH1 (RX) : origin=0x00080000 length=0x00007FFF
FLASH1 (RX) : origin=0x00080000 length=0x0000BFFF //length=0x00007FFF
STACKS (RW) : origin=0x08000000 length=0x00000A00 //800
RAM (RW) : origin=0x08000A00 length=0x00005800// length=0x00003600//length=0x00005800 //800--5800//20200409


/* USER CODE BEGIN (1) */
/* USER CODE END */
}

/* USER CODE BEGIN (2) */
/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Section Configuration */

//-----------------------KWP.obj (.text)// EBD.obj (.text)---// ------------

SECTIONS
{
.intvecs : {} > VECTORS
.vim_table : {} > VIM_TABLE
.mysec : {
EBD.obj (.text)
CAN.obj(.text)
//dirver.obj (.text)
PI.obj (.text)
GT.obj (.text)
SCI.obj (.text)
//KWP.obj (.text)
gio.obj (.text)
spi.obj (.text)
VSO.obj (.text)
M301CAN.obj (.text)
diag.obj (.text)
alldriver.obj (.text)
} >FLASH1
.text : {} > FLASH0


.const : {} > FLASH0 | FLASH1
.cinit : {} > FLASH0 | FLASH1
.pinit : {} > FLASH0 | FLASH1
.bss : {} > RAM
.data : {} > RAM
.sysmem : {} > RAM

.stack :
{
. += 0x00000500; _Stack_Table_Pointer = .; //400//20200409
. += 0x00000500; _Stack_Handler_Pointer = .; //400//20200409
} > STACKS

}

/* USER CODE BEGIN (3) */
/* USER CODE END */
//}

/* USER CODE BEGIN (4) */
/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Misc */

/* USER CODE BEGIN (5) */
/* USER CODE END */

/*----------------------------------------------------------------------------*/

有以下疑问:

1)可以看到当前代码设置中,RAM的length 0x5800已经超过了单一RAM长度0x3FFF,是否合理?如果不合理,该如何在memory中进行配置?

2)系统程序中,分两部分,一部分占用RAM 9000字节(0x2328),另一部分占用11856字节(0x2E50)。考虑到程序动态处理数据需要产生一部分RAM占用,结合上述芯片的本身RAM资源情况,该如何解决静态内存分配问题?同时如何保持动态运行程序稳定?以下是系统程序中其中一部分动态运行的资源占用情况,请结合参考:车速数据输入为高速100kph以上时,会消耗相应缓冲区来存储时间戳数据,1个100ms缓冲区,3个20ms缓冲区,共992字节;

3)尝试启用RAM内存段 0x08080000-0x08083FFF扩展RAM存储空间,主要代码段如下:

...

RAM0     (RW) : origin=0x08000A00 length=0x00003600//length=0x00005800 //800--5800//20200409

RAM1    (RW) : origin=0x08080000  length=0x00003FFF

...

.bss : {

        *(.bss*)

        *(.bss_ram1)

        . = ALIGN(4);

    } > RAM0 | RAM1

 

    .data : {

        *(.data*)

        *(.data_ram1)

        . = ALIGN(4);

    } > RAM0 | RAM1

 

    .sysmem : {

        *(.sysmem*)

        . = ALIGN(4);

    } > RAM0 | RAM1

 

    .bss : {

        *(.bss*)

        iTPMS_G101_NEW_1101.lib (.bss)

        . = ALIGN(4);

    } > RAM1

 

    .data : {

        *(.data*)

        iTPMS_G101_NEW_1101.lib (.data)

        . = ALIGN(4);

    } > RAM1

 

    .sysmem : {

        *(.sysmem*)

        iTPMS_G101_NEW_1101.lib (.sysmem)

        . = ALIGN(4);

    } > RAM1

...

编译后没有报错,但是程序运行异常(系统中的一部分功能运行不了)。然后我看到了在芯片手册中有个细节:

是否意味着RAM-CLR Space 和 RAM-SET Space这两块区域不能作为常规随机存储区域来用?RAM-CLR Space 和 RAM-SET Space这两块区域的作用是什么?基于本系统程序的资源需求,还能如何应用TMS470MF03107这个芯片吗?

因为比较紧急,希望得到您或者贵司相关人员的准确回答,谢谢!