用cmd文件配置指定变量的存储位置 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4456|回复: 4
打印 上一主题 下一主题

[未解决] 用cmd文件配置指定变量的存储位置

[复制链接]

5

主题

8

帖子

135

积分

注册会员

Rank: 2

积分
135
跳转到指定楼层
楼主
发表于 2018-9-7 09:27:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 李思凝 于 2018-9-7 10:21 编辑

想将一个结构体型的多维数组变量存储到缓存L2RAM里。以三维数组“eee”为例,对该变量的定义和操作如下:
typedef struct complex
{
        float real;
        float image;
}Comp;

Comp eee[5][360][4];


void main()
{
        // 对eee赋值 //
        while(1)
        {
                // 其他运算,需要读取eee的值 //
        }
}

为了将该变量存储到缓存L2RAM中,尝试了以下方法进行操作:
在声明变量eee前,使用预编译命令DATA_SECTION,即

#pragma DATA_SECTION(eee, "eee_LxRAM")
Comp eee[5][360][4];
并在cmd文件里添加如下语句:
eee_LxRAM.real                > SHDSPL2RAM       // 把这个结构体存储到L2RAM里
eee_LxRAM.image            > SHDSPL2RAM

【现象】
但在线仿真时观察变量地址时发现,eee的地址总是会被自动放到SHDSPL2ROM里。经过排查,cmd文件中已经将其他全部内容存入DDR2中,并且该工程没有用到缓存,因此应该不会出现其他变量占用L2RAM导致其空间不够的问题;经过计算,L2RAM的存储空间完全足够存储该结构体:32(float型位数) × 2(结构体中有两个元素) × 5 × 360 × 4(数组维度) = 460800 bits = 57600 Bytes = 56.25 kB < 256kB (L2RAM的存储空间)
此外,采用视频中的做法,在cmd文件中添加“.eee   >  SHDSPL2RAM ”同样无法解决问题。


【问题】
请问要如何操作才能把该结构体多维数组变量存储到我指定的缓存空间?该变量又为什么会被自动存储到L2的ROM里?
请工程师拨冗解答,谢谢!






分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

17

主题

193

帖子

1628

积分

创龙

Rank: 8Rank: 8

积分
1628
沙发
发表于 2018-9-7 11:06:23 | 只看该作者
你好,L2的ROM理论上是DSP内部不开放的使用空间。CMD配置文件中也没有定义L2的ROM的内存区域,供使用的只有RAM,您这边怎么判断是在ROM中运行?

另外,你的程序是仿真模式还是存放在NAND中运行?
回复 支持 反对

使用道具 举报

5

主题

8

帖子

135

积分

注册会员

Rank: 2

积分
135
板凳
 楼主| 发表于 2018-9-7 11:19:37 | 只看该作者
Tronlong-陈工 发表于 2018-9-7 11:06
你好,L2的ROM理论上是DSP内部不开放的使用空间。CMD配置文件中也没有定义L2的ROM的内存区域,供使用的只有 ...

你好,在cmd文件中,对L1、L2的各个地址都有定义及说明,例如:SHDSPL2ROM   o = 0x11700000  l = 0x00100000  /* 1MB   L2 共享内置 ROM */
SHDSPL2RAM   o = 0x11800000  l = 0x00040000  /* 256KB L2 共享内置 RAM */
而当进入在线仿真时,可以在Expressions中看到变量的地址,类似下图最后一列C:\Users\TGL\Desktop\const - SHDSPL1DRAM.jpg

我发现eee的首地址恰好为0x11700000。
回复 支持 反对

使用道具 举报

5

主题

8

帖子

135

积分

注册会员

Rank: 2

积分
135
地板
 楼主| 发表于 2018-9-7 11:22:10 | 只看该作者
本帖最后由 李思凝 于 2018-9-7 12:12 编辑
Tronlong-陈工 发表于 2018-9-7 11:06
你好,L2的ROM理论上是DSP内部不开放的使用空间。CMD配置文件中也没有定义L2的ROM的内存区域,供使用的只有 ...

不好意思图片没能加进去……另外,我是在线仿真时看到的数据地址,没有存放在NAND中脱机测试.我对其他常数类变量也进行过类似的操作,例如在main.c文件里作如下声明:
#pragma DATA_SECTION(H_filter, "H_filter_L2")
float H_filter[8] = {1,2,3,4,5,6,7,8};

并在cmd文件里添加:
H_filter_L2                > SHDSPL2RAM
在在线仿真时的确能在Expressions中看到变量H_filter的地址在SHDSPL2RAM区域内,即在0x11800000和0x11840000之间。
回复 支持 反对

使用道具 举报

5

主题

8

帖子

135

积分

注册会员

Rank: 2

积分
135
5#
 楼主| 发表于 2018-9-10 10:08:07 | 只看该作者
Tronlong-陈工 发表于 2018-9-7 11:06
你好,L2的ROM理论上是DSP内部不开放的使用空间。CMD配置文件中也没有定义L2的ROM的内存区域,供使用的只有 ...

我存储变量的位置是缓存的公共内存区域,请问该区域不会开放使用吗?贵司提供的cmd使用教程视频中也出现了对这些空间首地址和长度的定义。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-2 19:45 , Processed in 0.036341 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表