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

关于不同编译器版本下的栈设置问题

TMS320F28335芯片

原来有一版编译器为TIv6.2.0的 程序,没有问题,现在改成新的TIv6.4.6,rts2800_fpu32.lib也改了,但是发生了错误:

<Linking>
"../CMD/F28335.cmd", line 147: error #10099-D: program will not fit into available memory. run placement with alignment/blocking fails for section ".stack" size 0x400 page 1. Available memory ranges:
RAMM1 size: 0x400 unused: 0x0 max hole: 0x0

f28335.cmd中是这样的:

.stack : > RAMM1 PAGE = 1
.ebss : > RAML6 PAGE = 1
.esysmem : > RAMM1 PAGE = 1

工程文件.map中是这样的

.esysmem 1 00000400 00000400 UNINITIALIZED
00000400 00000001 rts2800_fpu32.lib : memory.obj (.esysmem)
00000401 000003ff –HOLE–

显然是esysmem占了stack的位置,但是在TIv6.2.0编译器下,工程.map没有问题

.stack 1 00000400 00000400 UNINITIALIZED
00000400 00000400 –HOLE–

请问为什么,怎么解决

Hank Zhao:

右击工程,在c2000 linker下的basic options窗口中可以设置stack size。

TMS320F28335芯片

原来有一版编译器为TIv6.2.0的 程序,没有问题,现在改成新的TIv6.4.6,rts2800_fpu32.lib也改了,但是发生了错误:

<Linking>
"../CMD/F28335.cmd", line 147: error #10099-D: program will not fit into available memory. run placement with alignment/blocking fails for section ".stack" size 0x400 page 1. Available memory ranges:
RAMM1 size: 0x400 unused: 0x0 max hole: 0x0

f28335.cmd中是这样的:

.stack : > RAMM1 PAGE = 1
.ebss : > RAML6 PAGE = 1
.esysmem : > RAMM1 PAGE = 1

工程文件.map中是这样的

.esysmem 1 00000400 00000400 UNINITIALIZED
00000400 00000001 rts2800_fpu32.lib : memory.obj (.esysmem)
00000401 000003ff –HOLE–

显然是esysmem占了stack的位置,但是在TIv6.2.0编译器下,工程.map没有问题

.stack 1 00000400 00000400 UNINITIALIZED
00000400 00000400 –HOLE–

请问为什么,怎么解决

ALAN YUAN:

回复 Hank Zhao:

知道设置stack size,但是在6.4.6编译器下,.esysmem就占了0x400,而RAMM1只有0x400这么大,这样我stack size无论设多大都没有用

TMS320F28335芯片

原来有一版编译器为TIv6.2.0的 程序,没有问题,现在改成新的TIv6.4.6,rts2800_fpu32.lib也改了,但是发生了错误:

<Linking>
"../CMD/F28335.cmd", line 147: error #10099-D: program will not fit into available memory. run placement with alignment/blocking fails for section ".stack" size 0x400 page 1. Available memory ranges:
RAMM1 size: 0x400 unused: 0x0 max hole: 0x0

f28335.cmd中是这样的:

.stack : > RAMM1 PAGE = 1
.ebss : > RAML6 PAGE = 1
.esysmem : > RAMM1 PAGE = 1

工程文件.map中是这样的

.esysmem 1 00000400 00000400 UNINITIALIZED
00000400 00000001 rts2800_fpu32.lib : memory.obj (.esysmem)
00000401 000003ff –HOLE–

显然是esysmem占了stack的位置,但是在TIv6.2.0编译器下,工程.map没有问题

.stack 1 00000400 00000400 UNINITIALIZED
00000400 00000400 –HOLE–

请问为什么,怎么解决

Hank Zhao:

回复 ALAN YUAN:

那你在CMD文件中将stack和esymem分配到不同的RAM区域中

TMS320F28335芯片

原来有一版编译器为TIv6.2.0的 程序,没有问题,现在改成新的TIv6.4.6,rts2800_fpu32.lib也改了,但是发生了错误:

<Linking>
"../CMD/F28335.cmd", line 147: error #10099-D: program will not fit into available memory. run placement with alignment/blocking fails for section ".stack" size 0x400 page 1. Available memory ranges:
RAMM1 size: 0x400 unused: 0x0 max hole: 0x0

f28335.cmd中是这样的:

.stack : > RAMM1 PAGE = 1
.ebss : > RAML6 PAGE = 1
.esysmem : > RAMM1 PAGE = 1

工程文件.map中是这样的

.esysmem 1 00000400 00000400 UNINITIALIZED
00000400 00000001 rts2800_fpu32.lib : memory.obj (.esysmem)
00000401 000003ff –HOLE–

显然是esysmem占了stack的位置,但是在TIv6.2.0编译器下,工程.map没有问题

.stack 1 00000400 00000400 UNINITIALIZED
00000400 00000400 –HOLE–

请问为什么,怎么解决

ALAN YUAN:

回复 Hank Zhao:

我将esysmem分配到RAML6中,编译通过了,但是还没来得及测试程序

对于cmd文件请问有比较详细的说明文档么,.esysmem的意义有相关的说明文档么

编译器不同带来的问题有没有个简单的解答?

我发现6.4.6编译后map文件有:

.esysmem 1 0000e000 00000400 UNINITIALIZED 0000e000 00000001 rts2800_fpu32.lib : memory.obj (.esysmem) 0000e001 000003ff –HOLE–

而6.2.0编译后没有相关内容

TMS320F28335芯片

原来有一版编译器为TIv6.2.0的 程序,没有问题,现在改成新的TIv6.4.6,rts2800_fpu32.lib也改了,但是发生了错误:

<Linking>
"../CMD/F28335.cmd", line 147: error #10099-D: program will not fit into available memory. run placement with alignment/blocking fails for section ".stack" size 0x400 page 1. Available memory ranges:
RAMM1 size: 0x400 unused: 0x0 max hole: 0x0

f28335.cmd中是这样的:

.stack : > RAMM1 PAGE = 1
.ebss : > RAML6 PAGE = 1
.esysmem : > RAMM1 PAGE = 1

工程文件.map中是这样的

.esysmem 1 00000400 00000400 UNINITIALIZED
00000400 00000001 rts2800_fpu32.lib : memory.obj (.esysmem)
00000401 000003ff –HOLE–

显然是esysmem占了stack的位置,但是在TIv6.2.0编译器下,工程.map没有问题

.stack 1 00000400 00000400 UNINITIALIZED
00000400 00000400 –HOLE–

请问为什么,怎么解决

Hank Zhao:

回复 ALAN YUAN:

在TMS320C28x Optimizing C/C++ Compiler文档中有简单的说明,.esysmem:Memory for far_malloc functions 。你设置一下优化试试

赞(0)
未经允许不得转载:TI中文支持网 » 关于不同编译器版本下的栈设置问题
分享到: 更多 (0)