程序中调用sprintf函数 报错:program will not fit into available memory ;(在线调试模式,使用官方提供RAM CMD文件)
这个函数应该占用内存资源相对较多,请问有什么办法可以有效解决这个问题?谢谢。
Seven Han:
参考下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
程序中调用sprintf函数 报错:program will not fit into available memory ;(在线调试模式,使用官方提供RAM CMD文件)
这个函数应该占用内存资源相对较多,请问有什么办法可以有效解决这个问题?谢谢。
mangui zhang:
使用这个应该有堆栈等大小要求 设大一些试试
程序中调用sprintf函数 报错:program will not fit into available memory ;(在线调试模式,使用官方提供RAM CMD文件)
这个函数应该占用内存资源相对较多,请问有什么办法可以有效解决这个问题?谢谢。
HG:
出现这种情况确实是存储空间的问题。可以从减小内存开销的角度优化一下程序。 提供一个思路:检查全局变量是否过多?
正常做法通过MAP文件、CMD文件核查空间的问题,然后针对性调整。
程序中调用sprintf函数 报错:program will not fit into available memory ;(在线调试模式,使用官方提供RAM CMD文件)
这个函数应该占用内存资源相对较多,请问有什么办法可以有效解决这个问题?谢谢。
user4397061:
回复 HG:
在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 } }
请问应该如何调整?
TI中文支持网



