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.

CCS6 为什么CMD文件中分配了page程序却不用呢,总是提示空间不够

Other Parts Discussed in Thread: CONTROLSUITE

我在程序中定义了8个长度为200的数组,build的时候会提示空间不足呢?

错误代码如下:

warning #10210-D: creating ".stack" section with default size of 0x400; use the
-stack option to change the default size
"C:/ti/controlSUITE/device_support/F2837xD/v110/F2837xD_common/cmd/2837x_RAM_lnk_cpu1.cmd", line 61: error #10099-D:
program will not fit into available memory. run placement with
alignment/blocking fails for section ".ebss" size 0x159c page 1. Available
memory ranges:
RAMLS5 size: 0x800 unused: 0x7f7 max hole: 0x7f7
RAMGS7 size: 0x1000 unused: 0x1000 max hole: 0x1000
RAMGS8 size: 0x1000 unused: 0x1000 max hole: 0x1000
error #10010: errors encountered during linking; "adc_epwm_cpu01.out" not
built

求大神指点!

  • 在CMD文件中将".ebss"段分配的内存空间改大一点。

  • 你的.ebss是映射到哪一段的空间呢,CCS不会跨段的

  • hank zhao,谢谢!

    我的分配情况是这样的


    .ebss : >>  RAMLS5 | RAMGS7 | RAMGS8, PAGE = 1
    .econst : >> RAMLS5 | RAMGS7 | RAMGS8, PAGE = 1
    .esysmem : >> RAMLS5 | RAMGS7 | RAMGS8, PAGE = 1

    但是在map文件中显示这三段都是 notused 疑惑/

    不知这是什么原因啊

  • BIN YAO 你好

    我的映射情况是这样的,但是在map文件中显示 这三块都是 notused,求解答啊,谢谢!
    .ebss : >> RAMLS5 | RAMGS7 | RAMGS8, PAGE = 1
    .econst : >> RAMLS5 | RAMGS7 | RAMGS8, PAGE = 1
    .esysmem : >> RAMLS5 | RAMGS7 | RAMGS8, PAGE = 1

  • RAMLS5 , RAMGS7 ,RAMGS8这三段的地址是不是连续的,如果不是连续的地址的的话就不能这样写,也就是楼上所说的CCS不能跨段。

  • RAMLS5、RAMGS7和RAMGS8是三个段,不管地址是否连续,CCS都会认为其是3个不同的段,因此>>a|b这样的写法是不可以的。

    你可以在声明段的时候把这三个段变成一段,然后再把.ebss、.econst、.esysmem映射到该段就行

  • hank zhao 谢谢!

    原来是这样,涨姿势了,不过我现在又发现一个问题,我给ccs里面.text分配了空间之后,ccs却没有使用,必须加上一个RAMGS类型的空间build才不会报错

    我的CMD文件里面这一行是这样的

     .text            : >>RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4 | RAMLS5 | RAMGS15  ,   PAGE = 0

    但是,map文件里面使用情况却是这样的:

    MEMORY CONFIGURATION

    name   origin   length   used   unused   attr   fill
    ---------------------- -------- --------- -------- -------- ---- --------
    PAGE 0:
    BEGIN 00000000 00000002 00000002 00000000 RWIX
    RAMM0 00000122 000002de 000002d7 00000007 RWIX
    RAMLS0 00008000 00000800 0000072b 000000d5 RWIX
    RAMLS1 00008800 00000800 00000000 00000800 RWIX
    RAMLS2 00009000 00000800 00000000 00000800 RWIX
    RAMLS3 00009800 00000800 00000000 00000800 RWIX
    RAMLS4 0000a000 00000800 00000000 00000800 RWIX
    RAMLS5 0000a800 00000800 00000000 00000800 RWIX
    RAMD0 0000b000 00000800 000007ff 00000001 RWIX
    RAMGS15 0001b000 00001000 00000a46 000005ba RWIX

    可以看到RAMLS1~RAMLS5全都没有使用啊,而且要是我不加上RAMGS15的话,就提示空间不够了,我已经把RAMGS15放在page0里面去了

    求解答啊!

  • BIN YAO1 谢谢你!

    原来是这样,涨姿势了,不过我现在又发现一个问题,我给ccs里面.text分配了空间之后,ccs却没有使用,必须加上一个RAMGS类型的空间build才不会报错

    我的CMD文件里面这一行是这样的

     .text            : >>RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4 | RAMLS5 | RAMGS15  ,   PAGE = 0

    但是,map文件里面使用情况却是这样的:

    MEMORY CONFIGURATION

    name   origin   length   used   unused   attr   fill
    ---------------------- -------- --------- -------- -------- ---- --------
    PAGE 0:
    BEGIN 00000000 00000002 00000002 00000000 RWIX
    RAMM0 00000122 000002de 000002d7 00000007 RWIX
    RAMLS0 00008000 00000800 0000072b 000000d5 RWIX
    RAMLS1 00008800 00000800 00000000 00000800 RWIX
    RAMLS2 00009000 00000800 00000000 00000800 RWIX
    RAMLS3 00009800 00000800 00000000 00000800 RWIX
    RAMLS4 0000a000 00000800 00000000 00000800 RWIX
    RAMLS5 0000a800 00000800 00000000 00000800 RWIX
    RAMD0 0000b000 00000800 000007ff 00000001 RWIX
    RAMGS15 0001b000 00001000 00000a46 000005ba RWIX

    可以看到RAMLS1~RAMLS5全都没有使用啊,而且要是我不加上RAMGS15的话,就提示空间不够了,我已经把RAMGS15放在page0里面去了

    求解答啊!

  • 将text分配的段改为 .text            : >> RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4 | RAMLS5,   PAGE = 0  ,不要把不连续的内存空间用这个符号连在一起。

  • guodong

    .text            : >>RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4 | RAMLS5 | RAMGS15  ,   PAGE = 0

    这种语法只会把.text放进某一个能放得下的RAM存储块块,比如.text代码有100个数据,只有RAMGS15才超过100,那么数据就会放在这个模块。其他小于100的模块不会用。

    如果.text超过上述中所有的块的话,那就会报错。所以上述的语法是并联方式,而非串连。

    如果.text太大的话,你应该在上述的存储块中将这些块连在一起,如RAMLS1S2 : 起始地址, 长度。

    Eric

  • Eric MA 

    谢谢你大神!

    果然是大神啊,我已经搞清楚如何改这一块的CMD文件了,解决了我长时间的困惑,thank you!

  • 我想请问一下,如何把.ebss 里的变量放入不同的内存空间,比如 我现在有RAML4、RAML5、RAML6、RAML7这四个区域,RAML5已经被其它部分用了,只剩下RAML4、RAML6、RAML7这三个空间,这三个空间加在一起才能够放得下.ebss中的变量,这时候需要用什么样的操作符进行操作呢?

  • 我想请问一下,如何把.ebss 里的变量放入不同的内存空间,比如 我现在有RAML4、RAML5、RAML6、RAML7这四个区域,RAML5已经被其它部分用了,只剩下RAML4、RAML6、RAML7这三个空间,这三个空间加在一起才能够放得下.ebss中的变量,这时候需要用什么样的操作符进行操作呢?

    Eric:

    你可以把RAML4替代RAML5, 然后把RAML5,RAML6, RAML7全部整合成一个模块,然后就可以用了。