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

28335编译报错run placement fails for object ".ebss"placement 和 fails for object ".cinit"

我用CCS3.3进行28335编程时,发现有如下编译错误

[Linking…] "H:\Program Files\C2000 Code Generation Tools 5.1.1\bin\cl2000" -@"Debug.lkf"
<Linking>
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 131: error:   run placement fails for object ".ebss"
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 126: error:   placement fails for object ".cinit"
error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

后来我检查发现好像与我定义的一个14400个浮点型数据的数组float PMSM_SINTAB[14400]有关,我将cmd中.ebss对应空间由原来的0x00C000-0xCFFF(RAML4)扩大为0x00C000-0xFFFF(RAML4567),并将数组改为7200个元素后编译能通过(但如果保持元素为14400个仍会报错)

1.请问出现上述错误是不是与我定义的数组过大有关,如果是的话为什么不提示内存不够用那?如果不是的话,又是什么原因引起的?

2.如果我想保持该数组元素数量为14400个,应该如何继续修改CMD文件使程序正常运行?

下面附上我修改过后的CMD文件以便于理解,多谢!

Hank Zhao:

我想这可能是因为全局变量在存储时是存储在Flash中的,所以不会提示内存不够用。但全局变量需要在程序初始化阶段搬移到RAM空间。如果要保持14400个元素数量,直接继续增大ebss的分配空间,数据在存储时并不是完全连续的,所以内存分配要留有一定的余地。

我用CCS3.3进行28335编程时,发现有如下编译错误

[Linking…] "H:\Program Files\C2000 Code Generation Tools 5.1.1\bin\cl2000" -@"Debug.lkf"
<Linking>
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 131: error:   run placement fails for object ".ebss"
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 126: error:   placement fails for object ".cinit"
error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

后来我检查发现好像与我定义的一个14400个浮点型数据的数组float PMSM_SINTAB[14400]有关,我将cmd中.ebss对应空间由原来的0x00C000-0xCFFF(RAML4)扩大为0x00C000-0xFFFF(RAML4567),并将数组改为7200个元素后编译能通过(但如果保持元素为14400个仍会报错)

1.请问出现上述错误是不是与我定义的数组过大有关,如果是的话为什么不提示内存不够用那?如果不是的话,又是什么原因引起的?

2.如果我想保持该数组元素数量为14400个,应该如何继续修改CMD文件使程序正常运行?

下面附上我修改过后的CMD文件以便于理解,多谢!

user3790273:

回复 Hank Zhao:

那请问是不是也应该给.cinit分配足够大的空间那,因为好像“程序上电时数据.cinit空间中的数据复制出来并存储在.ebss中”?

2.另外你说的数据存储在FLASH中是什么意思,对应着CMD中的哪一个段?

3.有没有关于自己分配内存的限制或者规则的说明文档(最好中文),我再研究一下

我用CCS3.3进行28335编程时,发现有如下编译错误

[Linking…] "H:\Program Files\C2000 Code Generation Tools 5.1.1\bin\cl2000" -@"Debug.lkf"
<Linking>
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 131: error:   run placement fails for object ".ebss"
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 126: error:   placement fails for object ".cinit"
error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

后来我检查发现好像与我定义的一个14400个浮点型数据的数组float PMSM_SINTAB[14400]有关,我将cmd中.ebss对应空间由原来的0x00C000-0xCFFF(RAML4)扩大为0x00C000-0xFFFF(RAML4567),并将数组改为7200个元素后编译能通过(但如果保持元素为14400个仍会报错)

1.请问出现上述错误是不是与我定义的数组过大有关,如果是的话为什么不提示内存不够用那?如果不是的话,又是什么原因引起的?

2.如果我想保持该数组元素数量为14400个,应该如何继续修改CMD文件使程序正常运行?

下面附上我修改过后的CMD文件以便于理解,多谢!

user3790273:

回复 Hank Zhao:

那请问是不是也应该给.cinit分配足够大的空间那,因为好像“程序上电时数据.cinit空间中的数据复制出来并存储在.ebss中”?

2.另外你说的数据存储在FLASH中是什么意思,对应着CMD中的哪一个段?

3.有没有关于自己分配内存的限制或者规则的说明文档(最好中文),我再研究一下

我用CCS3.3进行28335编程时,发现有如下编译错误

[Linking…] "H:\Program Files\C2000 Code Generation Tools 5.1.1\bin\cl2000" -@"Debug.lkf"
<Linking>
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 131: error:   run placement fails for object ".ebss"
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 126: error:   placement fails for object ".cinit"
error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

后来我检查发现好像与我定义的一个14400个浮点型数据的数组float PMSM_SINTAB[14400]有关,我将cmd中.ebss对应空间由原来的0x00C000-0xCFFF(RAML4)扩大为0x00C000-0xFFFF(RAML4567),并将数组改为7200个元素后编译能通过(但如果保持元素为14400个仍会报错)

1.请问出现上述错误是不是与我定义的数组过大有关,如果是的话为什么不提示内存不够用那?如果不是的话,又是什么原因引起的?

2.如果我想保持该数组元素数量为14400个,应该如何继续修改CMD文件使程序正常运行?

下面附上我修改过后的CMD文件以便于理解,多谢!

Hank Zhao:

回复 user3790273:

cinit不用太大的空间,它只是一段初始化程序。全局变量的初始值应该是和代码一起存储在text段的,在main函数运行前,由cinit代码将其初始化到ebss段。

我用CCS3.3进行28335编程时,发现有如下编译错误

[Linking…] "H:\Program Files\C2000 Code Generation Tools 5.1.1\bin\cl2000" -@"Debug.lkf"
<Linking>
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 131: error:   run placement fails for object ".ebss"
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 126: error:   placement fails for object ".cinit"
error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

后来我检查发现好像与我定义的一个14400个浮点型数据的数组float PMSM_SINTAB[14400]有关,我将cmd中.ebss对应空间由原来的0x00C000-0xCFFF(RAML4)扩大为0x00C000-0xFFFF(RAML4567),并将数组改为7200个元素后编译能通过(但如果保持元素为14400个仍会报错)

1.请问出现上述错误是不是与我定义的数组过大有关,如果是的话为什么不提示内存不够用那?如果不是的话,又是什么原因引起的?

2.如果我想保持该数组元素数量为14400个,应该如何继续修改CMD文件使程序正常运行?

下面附上我修改过后的CMD文件以便于理解,多谢!

Hank Zhao:

回复 user3790273:

没有专门介绍内存分配的文档,中文就更少了,在以下文档的“Linking C/C++ Code”部分有些这方面的介绍,你可以参考一下:http://www.ti.com/dsp/docs/litabsmultiplefilelist.tsp?sectionId=3&tabId=409&literatureNumber=spru514h&docCategoryId=6&familyId=44&keyMatch=TMS320C28x Optimizing C/C++&tisearch=Search-EN-Everything

我用CCS3.3进行28335编程时,发现有如下编译错误

[Linking…] "H:\Program Files\C2000 Code Generation Tools 5.1.1\bin\cl2000" -@"Debug.lkf"
<Linking>
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 131: error:   run placement fails for object ".ebss"
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 126: error:   placement fails for object ".cinit"
error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

后来我检查发现好像与我定义的一个14400个浮点型数据的数组float PMSM_SINTAB[14400]有关,我将cmd中.ebss对应空间由原来的0x00C000-0xCFFF(RAML4)扩大为0x00C000-0xFFFF(RAML4567),并将数组改为7200个元素后编译能通过(但如果保持元素为14400个仍会报错)

1.请问出现上述错误是不是与我定义的数组过大有关,如果是的话为什么不提示内存不够用那?如果不是的话,又是什么原因引起的?

2.如果我想保持该数组元素数量为14400个,应该如何继续修改CMD文件使程序正常运行?

下面附上我修改过后的CMD文件以便于理解,多谢!

user3790273:

回复 Hank Zhao:

你好,我按照http://blog.csdn.net/wu159632/article/details/7965883该网页中的方法,将大的数组定义在了ZoneData7,解决了.ebss警告,但是.cinit段仍有如下警告:

"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 127: error:    placement fails for object ".cinit"error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

我尝试将.cinit段扩展为0x00A000-0x006000(L2-L6)发现仍会报错,请问我该怎样进一步解决这个问题?

2.我进行.cinit段扩展为0x00A000-0x006000(L2-L6),将其他映射在PAGE1的几种段全部分配在L7,请问这样分配没错吧,我感觉这是我能为.cinit段所分配的最大内存空间了,(L0-L1留给了.text,编译发现.text需要两个),如果是因为.cinit段不够大的原因的话,如何进一步扩大.cinit?如果不是,又是因为什么原因?

比较着急,希望大家也能帮助解决一下

我用CCS3.3进行28335编程时,发现有如下编译错误

[Linking…] "H:\Program Files\C2000 Code Generation Tools 5.1.1\bin\cl2000" -@"Debug.lkf"
<Linking>
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 131: error:   run placement fails for object ".ebss"
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 126: error:   placement fails for object ".cinit"
error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

后来我检查发现好像与我定义的一个14400个浮点型数据的数组float PMSM_SINTAB[14400]有关,我将cmd中.ebss对应空间由原来的0x00C000-0xCFFF(RAML4)扩大为0x00C000-0xFFFF(RAML4567),并将数组改为7200个元素后编译能通过(但如果保持元素为14400个仍会报错)

1.请问出现上述错误是不是与我定义的数组过大有关,如果是的话为什么不提示内存不够用那?如果不是的话,又是什么原因引起的?

2.如果我想保持该数组元素数量为14400个,应该如何继续修改CMD文件使程序正常运行?

下面附上我修改过后的CMD文件以便于理解,多谢!

Hank Zhao:

回复 user3790273:

那你的板子上有没有在Zone7处连接外部RAM?

我用CCS3.3进行28335编程时,发现有如下编译错误

[Linking…] "H:\Program Files\C2000 Code Generation Tools 5.1.1\bin\cl2000" -@"Debug.lkf"
<Linking>
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 131: error:   run placement fails for object ".ebss"
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 126: error:   placement fails for object ".cinit"
error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

后来我检查发现好像与我定义的一个14400个浮点型数据的数组float PMSM_SINTAB[14400]有关,我将cmd中.ebss对应空间由原来的0x00C000-0xCFFF(RAML4)扩大为0x00C000-0xFFFF(RAML4567),并将数组改为7200个元素后编译能通过(但如果保持元素为14400个仍会报错)

1.请问出现上述错误是不是与我定义的数组过大有关,如果是的话为什么不提示内存不够用那?如果不是的话,又是什么原因引起的?

2.如果我想保持该数组元素数量为14400个,应该如何继续修改CMD文件使程序正常运行?

下面附上我修改过后的CMD文件以便于理解,多谢!

user3790273:

回复 Hank Zhao:

现在还没有连接开发板,只是软件编程发现编译出错,难道“外扩SRAM"指的是需要外接静态存储器,同时像之前所说的一样通过分配段后才可用吗?

为什么现在编译.cinit段仍会报错那?

我用CCS3.3进行28335编程时,发现有如下编译错误

[Linking…] "H:\Program Files\C2000 Code Generation Tools 5.1.1\bin\cl2000" -@"Debug.lkf"
<Linking>
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 131: error:   run placement fails for object ".ebss"
"E:\\work\\workccs3.3\\28335\\bianPQ\\DSP\\cmd\\28335_RAM_lnk.cmd", line 126: error:   placement fails for object ".cinit"
error: errors encountered during linking; "./Debug/DSP_BPQ.out" not built

后来我检查发现好像与我定义的一个14400个浮点型数据的数组float PMSM_SINTAB[14400]有关,我将cmd中.ebss对应空间由原来的0x00C000-0xCFFF(RAML4)扩大为0x00C000-0xFFFF(RAML4567),并将数组改为7200个元素后编译能通过(但如果保持元素为14400个仍会报错)

1.请问出现上述错误是不是与我定义的数组过大有关,如果是的话为什么不提示内存不够用那?如果不是的话,又是什么原因引起的?

2.如果我想保持该数组元素数量为14400个,应该如何继续修改CMD文件使程序正常运行?

下面附上我修改过后的CMD文件以便于理解,多谢!

JIAYING SUN:

赞(0)
未经允许不得转载:TI中文支持网 » 28335编译报错run placement fails for object ".ebss"placement 和 fails for object ".cinit"
分享到: 更多 (0)