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.

28377D 调用sprintf函数的问题

程序中调用sprintf函数 报错:program will not fit into available memory ;(在线调试模式,使用官方提供RAM CMD文件)

这个函数应该占用内存资源相对较多,请问有什么办法可以有效解决这个问题?谢谢。

  • 参考下e2e的帖子

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/266958?tisearch=e2e-sitesearch&keymatch=program%20will%20not%20fit%20into%20available%20memory

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/540367?tisearch=e2e-sitesearch&keymatch=sprintf%20%20%20program%20will%20not%20fit%20into%20available%20memory

  • 使用这个应该有堆栈等大小要求    设大一些试试

  • 出现这种情况确实是存储空间的问题。可以从减小内存开销的角度优化一下程序。 提供一个思路:检查全局变量是否过多?

    正常做法通过MAP文件、CMD文件核查空间的问题,然后针对性调整。

  • 在map文件中“.text.1    0    00000000    00000c05     FAILED TO ALLOCATE”,问题应该是出在这里

    CMD文件即为官方提供的:

    MEMORY
    {
    PAGE 0 :
    /* BEGIN is used for the "boot to SARAM" bootloader mode */

    BEGIN : origin = 0x000000, length = 0x000002
    RAMM0 : origin = 0x000080, length = 0x000380
    RAMD0 : origin = 0x00B000, length = 0x000800
    RAMLS0 : origin = 0x008000, length = 0x000800
    RAMLS1 : origin = 0x008800, length = 0x000800
    RAMLS2 : origin = 0x009000, length = 0x000800
    RAMLS3 : origin = 0x009800, length = 0x000800
    RAMLS4 : origin = 0x00A000, length = 0x000800
    RESET : origin = 0x3FFFC0, length = 0x000002

    PAGE 1 :

    BOOT_RSVD : origin = 0x000002, length = 0x00007E /* Part of M0, BOOT rom will use this for stack */
    RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
    RAMD1 : origin = 0x00B800, length = 0x000800


    RAMLS5 : origin = 0x00A800, length = 0x000800

    CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400
    CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400

    }


    SECTIONS
    {
    codestart : > BEGIN, PAGE = 0
    ramfuncs : > RAMM0 PAGE = 0
    .text : >>RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0
    .cinit : > RAMM0, PAGE = 0
    .pinit : > RAMM0, PAGE = 0
    .switch : > RAMM0, PAGE = 0
    .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */

    .stack : > RAMM1, PAGE = 1
    .ebss : > RAMLS5, PAGE = 1
    .econst : > RAMLS5, PAGE = 1
    .esysmem : > RAMLS5, PAGE = 1

    /* The following section definitions are required when using the IPC API Drivers */
    GROUP : > CPU2TOCPU1RAM, PAGE = 1
    {
    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX
    }

    GROUP : > CPU1TOCPU2RAM, PAGE = 1
    {
    GETBUFFER : TYPE = DSECT
    GETWRITEIDX : TYPE = DSECT
    PUTREADIDX : TYPE = DSECT
    }

    }

    请问应该如何调整?