嵌入式开发者社区
标题:
【求助】指定变量在各个片上存储区域的存储位置时出现...
[打印本页]
作者:
李思凝
时间:
2018-9-20 20:48
标题:
【求助】指定变量在各个片上存储区域的存储位置时出现...
由于程序的运算量很大,想把L1D和L2当做普通RAM,并将指定的数组变量存储在L1D和L2中。我的操作方法如下:
1. 先对L1DCFG和L2CFG寄存器进行操作,将L1D和L2配置为普通RAM而非Cache:
HWREG(0x01840040) &= ~0x00000007u; // 将L1D全部配置为RAM
HWREG(0x01840000) &= ~0x00000007u; // 将L2全部配置为RAM
2. 使用
#pragma SET_DATA_SECTION命令,将指定的
数组变量存储在L1D和L2中(这些数组变量全部为全局变量,且在main函数里会周期性地不断被读取和写入新值),例如:
#pragma SET_DATA_SECTION(".L1D_Variables") // 放到L1D中
float A1[1280]; // 未初始化的全局变量A1
int A2[4096] = {0}; // 已初始化的全局变量A2
#pragma SET_DATA_SECTION()
#pragma SET_DATA_SECTION(".L2_Variables") //
放到L2中
Comp B1[4][4]; // 未初始化的全局结构体变量B1
Comp B2[5][5][9] = {0}; // 已初始化的全局结构体变量B2
#pragma SET_DATA_SECTION()
3. 在cmd文件中将对应的变量存储到L1DRAM和L2RAM里:
SECTIONS
{
GROUP(NEAR_DP_RELATIVE)
{
.bss /* 未初始化全局及静态变量 */
.neardata
.rodata
} > DDR2
.text:_c_int00 > EntryPoint /* 可执行代码 C 程序入口点*/
.text > DDR2 /* 可执行代码 */
.data > DDR2 /* 已初始化全局及静态变量 */
...... /*其他各类皆全部存储于DDR2*/
.L1D
_Variables > SHDSPL1DRAM /* 指定存储于L1D中的变量 */
.L2
_Variables > SHDSPL2RAM /* 指定存储于L2中的变量 */
}
但是这样在实际测试时会出问题,最终程序运行得到的计算结果有误,而只要不用
SET_DATA_SECTION命令
把变量存到L1D和L2中,解算结果就是正确的。
请问这种情况是因为在cmd文件中已经指定了
已初始化/未
初始化
全局变量的存储位置在DDR2中导致的吗?或者是因为多变量跨存储区域读写导致出现不可控的问题?如果不是,可能是哪里的问题?
请工程师拨冗解答,谢谢!
作者:
Tronlong-陈工
时间:
2018-9-25 09:46
你好,关于缓存的配置可以参考我们基于C6748核心板的10-1与10-2章节《缓存》的学习视频。
[attach]3883[/attach][attach]3884[/attach]
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4