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赋值操作,看看有没有问题。或者增加堆栈看一下是否有改善。