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