TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6657: L1D配置为SRAM,并在L1D中定义了大小为32KB的数组,且在代码中进行读写时,系统运行不正常

Part Number:TMS320C6657

我在初始化中将L1D的缓存大小设置成0,即不适用缓存,全部配置成SRAM,代码如下:

void drv_cache_init(void)
{
CACHE_setL1DSize(CACHE_L1_0KCACHE);
CACHE_setL1PSize(CACHE_L1_0KCACHE);
CACHE_setL2Size(CACHE_0KCACHE);
}

在cmd文件中定义了L1D MEMORY,以及section,如下:

CORE0_L1D_SRAM:  o = 0x10F00000 l = 0x00008000   /* 32kB L1D/SRAM */

.meml1d    >  CORE0_L1D_SRAM

在cmd中将其他数据和指令都是分配在L2里的;

然后在一个测试文件中定义了一个大小32KB(与L1D SRAM的大小相同)的数组,并放入到L1D中,定义如下:

#pragma DATA_SECTION(dataL1D,".meml1d")

uint16_t dataL1D[0x4000];

在测试代码A中用for循环对数组进行赋值和读出;

测试代码A是由串口指令触发的,收到特定指令时,就会进入测试代码。

出现的现象是这样:

1.当屏蔽测试代码A时,整个程序可以正常运行,正常接收串口指令,其他测试代码可以正常进行;

2.不屏蔽测试代码A时,整个程序运行就不正常,要么是跑飞,要么是无法收到串口指令,其他测试代码也不能正常进行;

3.把dataL1D数组大小减半时,又和现象1一样,能正常运行。

 

那我的问题是:

L1D全部配置成SRAM时,使用上是存在着什么限制吗?

Nancy Wang:

Frand Green 说:L1D全部配置成SRAM时,使用上是存在着什么限制吗?

应该是没有限制的,

Frand Green 说:3.把dataL1D数组大小减半时,又和现象1一样,能正常运行。

看一下生成的map文件,数组大小为未减半前,是否占用内存溢出了?

,

Frand Green:

map文件中与L1D空间相关的地方:

run origin  load origin   length   init length attrs members

10f00000 10f00000 00008000 00000000 rw- 10f00000 10f00000 00008000 00000000 rw- .meml1d

output attributes/section page origin length input sections——– —- ———- ———- —————-

                  1082bd23    0000000b     (.cinit..meml1d.load) [load image, compression = rle]

.meml1d 0 10f00000 00008000 UNINITIALIZED                  10f00000 00008000 test_memory_cmp.obj (.meml1d)

.meml1d: load addr=1082bd23, load size=0000000b bytes, run addr=10f00000, run size=00008000 bytes, compression=rle

,

Nancy Wang:

看一下MEMORY CONFIGURATION部分,应该会显示used和unused部分的空间。

,

Frand Green:

CORE0_L1D_SRAM used 00008000,unused 00000000

MEMORY CONFIGURATION

name origin length used unused attr fill———————- ——– ——— ——– ——– —- ——– LOCAL_L2_SRAM 00800000 00100000 00000000 00100000 RWIX LOCAL_L1P_SRAM 00e00000 00008000 00000000 00008000 RWIX LOCAL_L1D_SRAM 00f00000 00008000 00000000 00008000 RWIX MSMSRAM 0c000000 00100000 00008000 000f8000 RWIX CORE0_L2_SRAM 10800000 00100000 0002c6c9 000d3937 RWIX CORE0_L1P_SRAM 10e00000 00008000 00000000 00008000 RWIX CORE0_L1D_SRAM 10f00000 00008000 00008000 00000000 RWIX CORE1_L2_SRAM 11800000 00100000 00000000 00100000 RWIX CORE1_L1P_SRAM 11e00000 00008000 00000000 00008000 RWIX CORE1_L1D_SRAM 11f00000 00008000 00000000 00008000 RWIX EMIF16_CE0 70000000 04000000 00000000 04000000 RWIX EMIF16_CE1 74000000 04000000 00000000 04000000 RWIX EMIF16_CE2 78000000 04000000 00000000 04000000 RWIX EMIF16_CE3 7c000000 04000000 00000000 04000000 RWIX DDR3_SRAM 80000000 20000000 00008000 1fff8000 RWIX

,

Nancy Wang:

看map文件没看出问题,并且也没有内存相关的报错,先简化代码,只在工程中对dataL1D赋值操作,看看有没有问题。或者增加堆栈看一下是否有改善。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6657: L1D配置为SRAM,并在L1D中定义了大小为32KB的数组,且在代码中进行读写时,系统运行不正常
分享到: 更多 (0)