工具与软件:
我正在尝试使用28335 eZdsp 上出现的外部 RAM (262,144字 x 16位)。
我需要 在该 存储器中存储6000个常规浮点值的11个向量。 我不需要存储任何其他元素。
我正在使用 DSP2833x_XINTF.c 来配置 XINT 模块。
这是我的 RAM.cmd 文件:
小程序
{
第0页:
/*开始用于"引导至 SARAM"引导加载程序模式*/
begin : origin = 0x000000、length = 0x000002 /* Boot to M0 will go here */
RAMM0:origin = 0x000050、length = 0x0003B0
RAML0:origin = 0x008000、length = 0x004000 // RAML3 RAML2 RAML1 RAML0 合并
CSM_RSVD:origin = 0x33FF80、length = 0x000076 /* FLASHA 的一部分。 当 CSM 正在使用时、编程为全0x0000。 */
CSM_PWL:origin = 0x33FFF8、length = 0x000008 /* FLASHA 的一部分。 FLASHA */中的 CSM 密码位置
ADC_CAL:origin = 0x380080、length = 0x000009
复位:origin = 0x3FFFC0、length = 0x000002
IQTABLES:origin = 0x3FE000、length = 0x000b50
IQTABLES2:origin = 0x3FEB50、length = 0x00008c
FPUTABLES:origin = 0x3FEBDC、length = 0x0006A0
BootROM:origin = 0x3FF27C、length = 0x000D44
第1页:
/* BOOT_RSVD 由引导 ROM 用于堆栈。 */
/*保留此部分仅用于保留引导 ROM */
/*在调试过程中损坏此区域*/
BOOT_RSVD:origin = 0x000002、length = 0x00004E/*作为 M0的一部分、引导 ROM 将用于 STACK */
RAMM1:origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */
RAML4:origin = 0x00C000、length = 0x001000
RAML5:origin = 0x00D000、length = 0x001000
RAML6:origin = 0x00E000、length = 0x001000
RAML7:origin = 0x00F000、length = 0x001000
ZONE7:origin = 0x200000、length = 0x040000 // 256KiB 外部存储器
}
部分中)
{
codestart :> beging, page = 0
ramfuncs :> RAML0,页面= 0
.text :> RAML0, page = 0
.cinit :> RAML0, page = 0
.pinit :> RAML0,页面= 0
.switch :> RAML0,页面= 0
stack:> RAMM1、页= 1.
.ebss :> RAML4,页面= 1.
econst :> RAML5, page = 1.
.esysmem :> RAMM1, page = 1.
FPUmathTables :> FPUTABLES , page = 0, type = NoLoad
DMARAML4 :> RAML4,页面= 1.
DMARAML5 :> RAML5, page = 1.
DMARAML6 :> RAML6,页面= 1.
DMARAML7 :> RAML7, page = 1.
ZONE7DATA :> ZONE7, PAGE = 1.
.reset :> RESET , PAGE = 0, TYPE = DSECT /*未使用*/
csm_rsvd :> csm_rsvd page = 0, type = dsect /* not used for SARAM examples*/
csmpasswds :> csm_pwl page = 0, type = DSECT /* not used for SARAM examples*/
/*分配 ADC_cal 函数(出厂时预编程到 TI 保留的存储器中)*/
.adc_cal:load = adc_CAL、page = 0、type = NoLoad
}
**有人可能会注意到、除了声明外部区域7、我还对内部存储器的分布进行了其他更改(与 TI .cmd 示例文件相比)。
这样做是为了更好地满足我的 项目的需要(太多的变量), 除了外部存储器,一切都运行良好。**
下面是在我的.c 文件中声明矢量的方法:
#define table_dim 6000
#pragma DATA_SECTION (w_table、"ZONE7DATA");
float w_table[table_dim];
#pragma DATA_SECTION (Edroop_table、"ZONE7DATA");
float Edroop_table[table_dim];
#pragma DATA_SECTION (PN_TABLE、"ZONE7DATA");
float PN_table[table_dim];
#pragma DATA_SECTION (qn_table、"ZONE7DATA");
float qn_table[table_dim];
#pragma DATA_SECTION (PJ_table、"ZONE7DATA");
float pj_table[table_dim];
#pragma DATA_SECTION (Qj_table、"ZONE7DATA");
float qj_table[table_dim];
#pragma DATA_SECTION (Pk_table、"ZONE7DATA");
Float Pk_table[TABLE_DIM];
#pragma DATA_SECTION (Qk_table、"ZONE7DATA");
float qk_table[table_dim];
#pragma DATA_SECTION (Prefn_table、"ZONE7DATA");
float Prefn_table[table_dim];
#pragma DATA_SECTION (Qrefn_table、"ZONE7DATA");
float Qrefn_table[table_dim];
#pragma DATA_SECTION (Vo3a_table、"ZONE7DATA");
float Vo3a_table[table_dim];
要进行测试:
内部 I;
for (i = 0;i < table_dim;i++)
{
w_table[i]= 1.0;
Edroop_table[i]= 2.0;
PN_TABLE[i]= 3.0;
Qn_table[i]= 4.0;
pj_table[i]= 5.0;
Qj_table[i]= 6.0;
pk_table[i]= 7.0;
Qk_table[i]= 8.0;
Prefn_table[i]= 9.0;
Qrefn_table[i]= 10.0;
Vo3a_table[i]= 11.0;
}
问题是:当我填充矢量时、我有重叠的值。 矢量 Vo3a_table 的一部分被写入属于 PJ_table 的存储器位置。 (我最终 在 PJ_table 中具有一些"11.0"、而不是仅具有"5.0")
OBS:CCS 的内存分配窗口显示只有50%(132k)用于 ZONE7 (262K)。
有人可以帮我吗?