工具与软件:
您好、尊敬的 TI 工程师朋友们:
以下是我遇到的问题的说明:
我们的系统程序是基于 TMS470MF03107开发的。 集成此系统程序后、RAM 所需的总 RAM 空间为0x5178字节。 实际的芯片存储器资源如下图所示:
当前 sys_link.cmd 文件如下所示:
/*------------------ */
/* sys_link.cmd */
/**/
/*(c)德州仪器(TI) 2011、保留所有权利。 */
/**/
/*用户代码 begin (0)*/
/*用户代码结束*/
/*------------------ */
/*链接器设置*/
-l rtsv7M3_T_be_eabi.lib
--retain="*(.intvecs)"
--retain="*(.vim_table )"
/*用户代码结束*/
/*------------------ */
/*内存映射*/
小程序
{
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
堆栈(RW):origin=0x08000000 length=0x00000A00 //800
RAM(RW): origin=0x08000A00 length=0x00005800// length=0x00003600//length=0x00005800//800-5800//20200409
/*用户代码 begin (1)*/
/*用户代码结束*/
}
/*用户代码 begin (2)*/
/*用户代码结束*/
/*------------------ */
/*段配置*/
//--------------- kwp.obj (.text)// ebd.obj (.text)--//-----
部分中)
{
.intvecs :{}>向量
.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
}>堆栈
}
/*用户代码 begin (3)*/
/*用户代码结束*/
//}
/*用户代码 begin (4)*/
/*用户代码结束*/
/*------------------ */
/*其他*/
/*用户代码 begin (5)*/
/*用户代码结束*/
/*------------------ */
问题 如下:
1) 1)可以看到 RAM 0x5800的长度超过了当前代码 Settings (设置)中单 RAM 长度0x3FFF、是否合理? 如果没有、如何在内存中对其进行配置?
2) 2)系统程序分为两部分、一部分占用9000字节的 RAM (0x2328)、另一部分占用11856字节(0x2E50)。 考虑到程序需要产生一部分 RAM 占用来进行动态数据处理、结合上述芯片自己的 RAM 资源、如何解决静态存储器分配的问题? 以及如何保持动态运行程序稳定? 以下是系统程序部分动态操作的资源占用情况、请参阅:当车速数据输入超过100kph 时、将使用相应的缓冲区来存储时间戳数据、一个100ms 缓冲区和三个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
...
它编译时不会出现错误、但程序运行不正确(系统的某些部分无法正常工作)。 那么我在芯片手册中看到了这个细节:
4) 这是否意味着 RAM-CLR Space 和 RAM-SET Space 不能用作程序运行的常规随机存储区域? 两个区域 RAM-CLR Space 和 RAM-SET Space 的用途是什么? 根据该系统程序的资源要求、如何应用此芯片的 RAM 发行版 TMS470MF03107?
5) 目前、编译后静态占用的 RAM 空间为0x5180、linkCMD 文件的配置大小为0x5800、超出了芯片手册中所指定的0x3FFF。 为什么仍有 CAN 消息? 从理论上讲、它不应该是内存不足吗? 如何直观地确定程序是否溢出? 我已经使用了 Sentinel 值、但它们不能很好地工作。
因为它是紧急的,我希望从您或贵公司的相关人员得到准确的回答,谢谢!