我在初始化中将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时,使用上是存在着什么限制吗?