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

TMS320F28388D: 283X编译开发内存分配问题,如图所示,已经在CMD留足空间给变量空间了,编译报错

Part Number:TMS320F28388DOther Parts Discussed in Thread:C2000WARE

如图所示,已经在CMD留足空间给变量空间了,编译报错,到底是什么原因呢?我分配112地址结果只能用64,65都不行,分配128地址只能用到80,81空间都不行,怎么这个区域的空间好像有部分固定的空间不能被自由分配了吗?请问一下。谢谢了

Susan Yang:

若是可以的话,能否详细说明一下?

user4486550 说:已经在CMD留足空间给变量空间了,编译报错,到底是什么原因呢?

请您给出consuit中的详细报错信息,谢谢

user4486550 说:我分配112地址结果只能用64,65都不行,分配128地址只能用到80,81空间都不行,怎么这个区域的空间好像有部分固定的空间不能被自由分配了吗?

没有太理解您这两句的意思,请详细说一下,谢谢

,

user4486550:

你看我cmd文件写得Origin=0x2210,length=0x70(空间也就等于112),实际我的变量使用空间才99(图中红色警告提示),但是还是不能够放进我定义的空间里面,提示内容大概是内存分配不够,但是我定义到其他区域的地址又是可以的,例如我把origin=0x2380,length=0x70又可以(对同一变量空间) ,就是说在0x2210这部分空间是不是不能用?

,

Susan Yang:

您可以看一下数据手册的 表 8-1. C28x Memory Map

https://www.ti.com.cn/cn/lit/ds/symlink/tms320f28388d.pdf 

user4486550 说:例如我把origin=0x2380

表 8-3. EMIF Chip Select Memory Map 

EMIF2 CS2n – Program + Data: 0x0000 2000—- 0x0000 2FFF

,

user4486550:

谢谢你的回复,我确实按照EMIF Chip Select Memory Map里面的地址去做分配的,我想做的是直接读变量就是相当于读对应EMIF的地址了,但是编译一直通过不了,我尝试修改我的变量数组大小,改到小于等于64个空间的时候才能编译通过,或者增大length,但是你要知道我实际的变量数组空间不需要那么大的,改完编译通过也有个问题,就是我的变量数组首地址不是从我定义的origin开始,而是有一个偏移量,我想知道那EMIF片选区域里面有些地址不能被定义使用吗?

,

Susan Yang:

user4486550 说:我想做的是直接读变量就是相当于读对应EMIF的地址了

能否说一下您这样做的目的?我还是有些不理解您的需求

您可以参考下C2000ware内的例程

C2000Ware\device_support\f2838x\examples\cpu1\emif

其中cmd文件的定义如下

EMIF1_CS0n : origin = 0x80000000, length = 0x10000000 EMIF1_CS2n : origin = 0x00100000, length = 0x00100000 EMIF1_CS0_CS2n : origin = 0x00200000, length = 0x00100000 EMIF1_CS3n : origin = 0x00300000, length = 0x00080000 EMIF1_CS4n : origin = 0x00380000, length = 0x00060000 EMIF2_CS0n : origin = 0x90000000, length = 0x10000000 EMIF2_CS2n : origin = 0x00002000, length = 0x00001000

emif_cs0_nonfar : > EMIF1_CS0_CS2n .farbss : > EMIF1_CS0n .farconst : > EMIF1_CS0n .em1_cs0 : > EMIF1_CS0n .em1_cs2 : > EMIF1_CS2n | EMIF1_CS0_CS2n .em1_cs3 : > EMIF1_CS3n .em1_cs4 : > EMIF1_CS4n .em2_cs0 : > EMIF2_CS0n .em2_cs2 : > EMIF2_CS2n

,

user4486550:

我的目的很简单,就好比如我要读em2_cs2里面的地址0x2010的数据,然后我定义一个数组变量为var【】,当程序调用var时候就读取到0x2010这个地址下的数据。这么讲应该明白我的意思了吧?其中一个办法是我需要在修改CMD文件,然后把定义的变量直接用#pragma DATA_SECTION(,"")的方法把变量定义到固定区域中,但是发现仿真的时候发现地址不在0x2010开始,也就是var的首地址不是我想要的,当我把0x2010改为2040后,var的首地址就是2040了,而不是其他了

,

Susan Yang:

user4486550 说:其中一个办法是我需要在修改CMD文件,然后把定义的变量直接用#pragma DATA_SECTION(,"")的方法把变量定义到固定区域中,

这个方法是没有问题的。我在例程内试了一下使用的是地址0x2000

如下图

  

cmd文件内:

EMIF2_CS2n : origin = 0x00002000, length = 0x00001000

.em2_cs2 : > EMIF2_CS2n

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28388D: 283X编译开发内存分配问题,如图所示,已经在CMD留足空间给变量空间了,编译报错
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1