在使用.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:
很高兴能帮到您!
TI中文支持网



