This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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文件以便于理解,多谢!

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

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

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

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

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

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

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

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

  • 没有专门介绍内存分配的文档,中文就更少了,在以下文档的“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

  • 你好,我按照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?如果不是,又是因为什么原因?

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

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

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

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