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.

.bss和.ebss段分配问题

刚开始接触cmd文件,现在碰到一个问题:

DSP2833x_PieVect.obj在link后,在map文件里面可以看到被分配到了.econst段。

当我把cmd文件中把.econst段删除,然后定义了一个.const段,在build的时候还是会自动分配到.econst段,内存空间也是自动分配的,同时会警告.econst这个段没有定义,而我在cmd文件中定义的.const段并没有用上。

除非我在DSP2833x_PieVect.c中#pragma指令把其中的结构体常量分配到.const段,DSP2833x_PieVect.obj才会分配到.const段中。

但是如果我没有加这条预处理指令时,我并没有在DSP2833x_PieVect.c找到任何把DSP2833x_PieVect.obj分配到.econst段的处理,到底是哪里导致DSP2833x_PieVect.obj被默认分配到了.econst段呢?

  • 我看了一下最新的TMS320C28x Assembly Language Tools User's Guide (spru513)和TMS320C28x Optimizing C/C++ Compiler User's Guide (spru514)

    似乎编译器已经不再使用.bss段,而是只有.ebss段了?除非自己定义一个.bss段。

    是这样吗?

  • 自己找到了答案,应该运行时库文件的区别导致的的,当库文件选用rts2800.lib时,会自动分配在.bss段,而当选用rts2800_ml.lib或rts2800_fpu32.lib时,就会自动分配在.ebss段。

    和编译器、链接器的版本并没有直接的关系

  • 区别导致的的,当库文件选用rts2800.lib时,会自动分配在.bss段,而当选用rts2800_ml.lib或rts2800_fpu32.lib时,就会自动分配在.ebss段。

    和编译器、链接器的版本并没有直接关系。

  • 您好,

    .bss与.ebss都可以使用,看这边帖子中的详细解释:

    http://e2e.ti.com/support/microcontrollers/c2000/f/171/p/438147/1570578?tisearch=e2e-sitesearch&keymatch=.ebss%20.bss#1570578