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

【求助】指定变量在各个片上存储区域的存储位置时出现问题

现在使用的是C6748芯片,由于目前程序的运算量很大,想把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中导致的吗?或者是因为多变量跨存储区域读写导致出现不可控的问题?如果不是,可能是哪里的问题?

请工程师拨冗解答,谢谢!

Shine:

L1D在上电后默认全部是cache,所以在cmd文件中.L1D_Variables> SHDSPL1DRAM/* 指定存储于L1D中的变量 */这个是没法吧数据分配到L1D里。

user5818713:

回复 Shine:

您好,我已经在进入主函数后第一时间通过配置L1DCFG寄存器,将L1D和L2配置为了普通RAM而非Cache:
HWREG(0x01840040) &= ~0x00000007u;// 将L1D全部配置为RAM
请问这样是否仍旧无法把数据分配到L1D中?若想指定部分全局变量存储于L1D中,有哪些方法?感谢您的解答!

Shine:

回复 user5818713:

cmd文件中对段的分配是在编译的时候就确定了,不是在代码执行时再分配。

赞(0)
未经允许不得转载:TI中文支持网 » 【求助】指定变量在各个片上存储区域的存储位置时出现问题
分享到: 更多 (0)