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这个芯片吗?
因为比较紧急,希望得到您或者贵司相关人员的准确回答,谢谢!