This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28335:将变量存储在 XINT 外部 RAM 中

Guru**** 2551300 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1420306/tms320f28335-storing-variables-in-xint-external-ram

器件型号:TMS320F28335

工具与软件:

我正在尝试使用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)。

有人可以帮我吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Henrique、

    让我解释一下这个问题、我将回来。

    谢谢

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Henrique、

    您能否分享映射文件以了解更多详细信息?

    谢谢

    Aswin