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.

ccs5编译问题

Other Parts Discussed in Thread: CONTROLSUITE

我在调试controlsuite的一个项目时出现以下问题:

当我申请一个全局变量时就出现

error: placement fails for object

  "IQmath", size 0x11a (page 0).  Available ranges:

  progRAM      size: 0x1900       unused: 0x68         max hole: 0x68      

error: errors encountered during linking;

好像是程序放不下,可我根本没有增加程序,这是什么原因?怎么解决?

我不申请变量但增加程序时反倒没有这个错误。

  • 这是因为您增加的变量的存储空间和IQmath的存储空间都放在同一个内存空间,就是ProgRAM,你可以看一下你的CMD文件,.ebss或者.stack应该也放在Prog. 但你的.text放在另外的区域。

    这就是之前的Prog的空间已经很满了,只要增加一个变量,那Prog就会溢出。而你增加的程序是放在另外的Ram空间的,那个空间有足够的剩余空间,因此没有错误。

  • MEMORY

    {

    PAGE 0 :

    /* Note that the memory allocation below does not create sections as necessary for

    the CLA on the F2803x.

    */

    BEGIN : origin = 0x000000, length = 0x000002

    BOOT_RSVD : origin = 0x000002, length = 0x00004E

    RAMM0 : origin = 0x000050, length = 0x0003B0

    progRAM : origin = 0x008000, length = 0x001900/*x001800*/

    IQTABLES : origin = 0x3FE000, length = 0x000B50 /* IQ Math Tables in Boot ROM */

    IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* IQ Math Tables in Boot ROM */

    IQTABLES3 : origin = 0x3FEBDC, length = 0x0000AA /* IQ Math Tables in Boot ROM */

    RESET : origin = 0x3FFFC0, length = 0x000002

    BOOTROM : origin = 0x3FF27C, length = 0x000D44

    PAGE 1 :

    RAMM1 : origin = 0x000480, length = 0x000380

    dataRAM : origin = 0x009900, length = 0x000800 /*x000800*/

    CLA_CPU_MSGRAM : origin = 0x001480, length = 0x000080

    CPU_CLA_MSGRAM : origin = 0x001500, length = 0x000080

    }

    SECTIONS

    {

    codestart : > BEGIN, PAGE = 0

    ramfuncs : > RAMM0, PAGE = 0

    .text : > progRAM, PAGE = 0

    .cinit : > RAMM0, PAGE = 0

    .pinit : > RAMM0, PAGE = 0

    .switch : > RAMM0, PAGE = 0

    .reset : > RESET, PAGE = 0, TYPE = DSECT

    .stack : > RAMM1, PAGE = 1

    .ebss : > dataRAM, PAGE = 1

    .econst : > dataRAM, PAGE = 1

    .esysmem : > RAMM1, PAGE = 1

    IQmath : > progRAM, PAGE = 0

    IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD

    Cla1ToCpuMsgRAM : > CLA_CPU_MSGRAM, PAGE = 1

    CpuToCla1MsgRAM : > CPU_CLA_MSGRAM, PAGE = 1

    /* Uncomment the section below if calling the IQNexp() or IQexp()

    functions from the IQMath.lib library in order to utilize the

    relevant IQ Math table in Boot ROM (This saves space and Boot ROM

    is 1 wait-state). If this section is not uncommented, IQmathTables2

    will be loaded into other memory (SARAM, Flash, etc.) and will take

    up space, but 0 wait-state is possible.

    */

    /*

    IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD

    {

    IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)

    }

    */

    /* Uncomment the section below if calling the IQNasin() or IQasin()

    functions from the IQMath.lib library in order to utilize the

    relevant IQ Math table in Boot ROM (This saves space and Boot ROM

    is 1 wait-state). If this section is not uncommented, IQmathTables2

    will be loaded into other memory (SARAM, Flash, etc.) and will take

    up space, but 0 wait-state is possible.

    */

    /*

    IQmathTables3 : > IQTABLES3, PAGE = 0, TYPE = NOLOAD

    {

    IQmath.lib<IQNasinTable.obj> (IQmathTablesRam)

    }

    */

    }

    SECTIONS

    {

    DLOG: > dataRAM,PAGE=1

    }

  • IQmath : > progRAM, PAGE = 0

    progRAM : origin = 0x008000, length = 0x001900/*x001800*/

    dataRAM : origin = 0x009900, length = 0x000800 /*x000800*/

    请问:

    0x9900+0x800=? 是否已经超过了0xA000? 已经越界了!

    另外,可以将IQmath放到别的区域去。