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

怎么解决C2000的CMD指定的邻近两个存储块不连续存放的问题?

在使用.TI.ramfunc时,使用了RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3,。每块大小为2K x 16,这样使用的本意是使用8K x 16.

当定义的.TI.ramfunc在2K x 16 以下时,编译正常,但当超过2K x 16 时,就提示错误:

error #10099-D: program will not fit into available memory. run placement with alignment/blocking fails for section ".TI.ramfunc" size 0x838 page 0. Available memory ranges:
RAMLS0 size: 0x800 unused: 0x800 max hole: 0x800 RAMLS1 size: 0x800 unused: 0x800 max hole: 0x800 RAMLS2 size: 0x800 unused: 0x800 max hole: 0x800 RAMLS3 size: 0x800 unused: 0x800 max hole: 0x800error #10010: errors encountered during linking; "CM_W55_CPU1.out" not built

注:CPU使用的是F28377D

请问,如果不使用 

RAMLS0_1          : origin = 0x008000, length = 0x001000

这样分配方法外,怎么解决两块以上连续使用的问题?

Susan Yang:

从错误中可以看出,每个RAM部分的大小均为0x800,其中“ .TI.ramfunc”的大小为0x838 ,因此无法将其放置在该部分中。您可以将两个RAM部分合并为一个,然后将其放置。具体可以参考

processors.wiki.ti.com/…/C28x_Compiler_-_Understanding_Linking

Susan Yang:

从错误中可以看出,每个RAM部分的大小均为0x800,其中“ .TI.ramfunc”的大小为0x838 ,因此无法将其放置在该部分中。

RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3
表示将名为.TI.ramfunc的整个输出节分配到列表中可以包含该节的第一个内存范围。仅选择一个存储范围。其余未使用。一旦.TI.ramfunc大于这些内存范围中的最大内存范围,分配就会失败。

所以一般都会采用

RAMLS0_LS3: origin = 0x008000, length = 0x000800 * 4

在SECTIONS指令中,将对内存范围名称RAMLS0到RAMLS3的任何使用更改为使用RAMLS0_LS3。

RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, 更改为 RUN = RAMLS0_LS3

TX dong:

回复 Susan Yang:

谢谢您!总是您来帮我解惑,非常感激。

把它合并成一块的办法,过去用过。现在想到的是,TI的CMD文件中,用的是RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3,应该可以自动连接起来存储的,所以就有此提问。

Susan Yang:

回复 TX dong:

很高兴能帮到您!

赞(0)
未经允许不得转载:TI中文支持网 » 怎么解决C2000的CMD指定的邻近两个存储块不连续存放的问题?
分享到: 更多 (0)