TI中文支持网
TI专业的中文技术问题搜集分享网站

各位大佬们,c2000 malloc失败是什么原因?

我的程序里面有两个大小一样的结构体数组A和B(比较大),初始化的时候要用memcpy复制到另外的结构体全局变量(C 和 D)中,复制之前会使用malloc分配空间。

给第一个全局变量C使用malloc分配大小为A的空间的时候,返回值为esysmem内地址c002

但是给第二个全局变量D使用malloc分配大小为B的空间时,返回值为0.

我的stack分配如下:

RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */

.stack              : > RAMM1        PAGE = 1

我的esysmem分配如下:

RAMGS4_5_6  : origin = 0x010000, length = 0x003000

.esysmem           : > RAMGS4_5_6       PAGE = 1

我的cint分配如下:

 FLASHB           : origin = 0x082000, length = 0x008000

.cinit              : > FLASHB      PAGE = 0, ALIGN(4)

MEMORY CONFIGURATION
         name            origin    length      used     unused   attr    fill
———————-  ——–  ———  ——–  ——–  —-  ——–
  FLASHB                00082000   00008000  00007ffb  00000005  RWIX
PAGE 1:
  BOOT_RSVD             00000002   00000120  00000000  00000120  RWIX
  RAMM1                 00000400   00000400  00000300  00000100  RWIX
RAMGS4_5_6            00010000   00003000  00001000  00002000  RWIX

片内空间还是比较充足的,malloc失败除了空间不够之外还有什么原因?

Green Deng:变量的话考虑是ram空间分配不足,有试过加大ram空间吗

我的程序里面有两个大小一样的结构体数组A和B(比较大),初始化的时候要用memcpy复制到另外的结构体全局变量(C 和 D)中,复制之前会使用malloc分配空间。

给第一个全局变量C使用malloc分配大小为A的空间的时候,返回值为esysmem内地址c002

但是给第二个全局变量D使用malloc分配大小为B的空间时,返回值为0.

我的stack分配如下:

RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */

.stack              : > RAMM1        PAGE = 1

我的esysmem分配如下:

RAMGS4_5_6  : origin = 0x010000, length = 0x003000

.esysmem           : > RAMGS4_5_6       PAGE = 1

我的cint分配如下:

 FLASHB           : origin = 0x082000, length = 0x008000

.cinit              : > FLASHB      PAGE = 0, ALIGN(4)

MEMORY CONFIGURATION
         name            origin    length      used     unused   attr    fill
———————-  ——–  ———  ——–  ——–  —-  ——–
  FLASHB                00082000   00008000  00007ffb  00000005  RWIX
PAGE 1:
  BOOT_RSVD             00000002   00000120  00000000  00000120  RWIX
  RAMM1                 00000400   00000400  00000300  00000100  RWIX
RAMGS4_5_6            00010000   00003000  00001000  00002000  RWIX

片内空间还是比较充足的,malloc失败除了空间不够之外还有什么原因?

orient:

回复 Green Deng:

增加过esysmem的空间, 没效果。 跟stack的空间有关吗?目前stack有0x400, 可以继续增加么?

我的程序里面有两个大小一样的结构体数组A和B(比较大),初始化的时候要用memcpy复制到另外的结构体全局变量(C 和 D)中,复制之前会使用malloc分配空间。

给第一个全局变量C使用malloc分配大小为A的空间的时候,返回值为esysmem内地址c002

但是给第二个全局变量D使用malloc分配大小为B的空间时,返回值为0.

我的stack分配如下:

RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */

.stack              : > RAMM1        PAGE = 1

我的esysmem分配如下:

RAMGS4_5_6  : origin = 0x010000, length = 0x003000

.esysmem           : > RAMGS4_5_6       PAGE = 1

我的cint分配如下:

 FLASHB           : origin = 0x082000, length = 0x008000

.cinit              : > FLASHB      PAGE = 0, ALIGN(4)

MEMORY CONFIGURATION
         name            origin    length      used     unused   attr    fill
———————-  ——–  ———  ——–  ——–  —-  ——–
  FLASHB                00082000   00008000  00007ffb  00000005  RWIX
PAGE 1:
  BOOT_RSVD             00000002   00000120  00000000  00000120  RWIX
  RAMM1                 00000400   00000400  00000300  00000100  RWIX
RAMGS4_5_6            00010000   00003000  00001000  00002000  RWIX

片内空间还是比较充足的,malloc失败除了空间不够之外还有什么原因?

Green Deng:

回复 orient:

.stack可以增加的
“返回值为0”时,CCS有报什么错吗?

我的程序里面有两个大小一样的结构体数组A和B(比较大),初始化的时候要用memcpy复制到另外的结构体全局变量(C 和 D)中,复制之前会使用malloc分配空间。

给第一个全局变量C使用malloc分配大小为A的空间的时候,返回值为esysmem内地址c002

但是给第二个全局变量D使用malloc分配大小为B的空间时,返回值为0.

我的stack分配如下:

RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */

.stack              : > RAMM1        PAGE = 1

我的esysmem分配如下:

RAMGS4_5_6  : origin = 0x010000, length = 0x003000

.esysmem           : > RAMGS4_5_6       PAGE = 1

我的cint分配如下:

 FLASHB           : origin = 0x082000, length = 0x008000

.cinit              : > FLASHB      PAGE = 0, ALIGN(4)

MEMORY CONFIGURATION
         name            origin    length      used     unused   attr    fill
———————-  ——–  ———  ——–  ——–  —-  ——–
  FLASHB                00082000   00008000  00007ffb  00000005  RWIX
PAGE 1:
  BOOT_RSVD             00000002   00000120  00000000  00000120  RWIX
  RAMM1                 00000400   00000400  00000300  00000100  RWIX
RAMGS4_5_6            00010000   00003000  00001000  00002000  RWIX

片内空间还是比较充足的,malloc失败除了空间不够之外还有什么原因?

orient:

回复 Green Deng:

编译时没有报错,但接下来执行memcpy的时候会触发ITRAP。原来的stack分配在RAMM1,还差100就满了,后来我把stack分配到GS7 RAM,但是这样导致HW_Init();执行失败, PC指向了0,再把stack分配给RAMD1, 它的空间时RAMM1的两倍, malloc给D返回的地址还是0。但是这次执行memcpy的时候没有触发ITRAP

我的程序里面有两个大小一样的结构体数组A和B(比较大),初始化的时候要用memcpy复制到另外的结构体全局变量(C 和 D)中,复制之前会使用malloc分配空间。

给第一个全局变量C使用malloc分配大小为A的空间的时候,返回值为esysmem内地址c002

但是给第二个全局变量D使用malloc分配大小为B的空间时,返回值为0.

我的stack分配如下:

RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */

.stack              : > RAMM1        PAGE = 1

我的esysmem分配如下:

RAMGS4_5_6  : origin = 0x010000, length = 0x003000

.esysmem           : > RAMGS4_5_6       PAGE = 1

我的cint分配如下:

 FLASHB           : origin = 0x082000, length = 0x008000

.cinit              : > FLASHB      PAGE = 0, ALIGN(4)

MEMORY CONFIGURATION
         name            origin    length      used     unused   attr    fill
———————-  ——–  ———  ——–  ——–  —-  ——–
  FLASHB                00082000   00008000  00007ffb  00000005  RWIX
PAGE 1:
  BOOT_RSVD             00000002   00000120  00000000  00000120  RWIX
  RAMM1                 00000400   00000400  00000300  00000100  RWIX
RAMGS4_5_6            00010000   00003000  00001000  00002000  RWIX

片内空间还是比较充足的,malloc失败除了空间不够之外还有什么原因?

Green Deng:

回复 orient:

还有一种可能,在前面的程序中出现了内存的越界访问,导致malloc()分配函数所涉及的一些信息被破坏。下次再使用malloc()函数申请内存就会失败,返回空指针NULL(0)。你可以从不能分配的那个malloc()函数开始,往回找地址最近的那个能分配的malloc()函数,出问题的代码应该就在这部分,很可能的原因就是指针越界,对未知的内存进行了操作,导致了malloc()不能继续分配内存。

我的程序里面有两个大小一样的结构体数组A和B(比较大),初始化的时候要用memcpy复制到另外的结构体全局变量(C 和 D)中,复制之前会使用malloc分配空间。

给第一个全局变量C使用malloc分配大小为A的空间的时候,返回值为esysmem内地址c002

但是给第二个全局变量D使用malloc分配大小为B的空间时,返回值为0.

我的stack分配如下:

RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */

.stack              : > RAMM1        PAGE = 1

我的esysmem分配如下:

RAMGS4_5_6  : origin = 0x010000, length = 0x003000

.esysmem           : > RAMGS4_5_6       PAGE = 1

我的cint分配如下:

 FLASHB           : origin = 0x082000, length = 0x008000

.cinit              : > FLASHB      PAGE = 0, ALIGN(4)

MEMORY CONFIGURATION
         name            origin    length      used     unused   attr    fill
———————-  ——–  ———  ——–  ——–  —-  ——–
  FLASHB                00082000   00008000  00007ffb  00000005  RWIX
PAGE 1:
  BOOT_RSVD             00000002   00000120  00000000  00000120  RWIX
  RAMM1                 00000400   00000400  00000300  00000100  RWIX
RAMGS4_5_6            00010000   00003000  00001000  00002000  RWIX

片内空间还是比较充足的,malloc失败除了空间不够之外还有什么原因?

orient:

回复 Green Deng:

不使用这个方法了,不过还是谢谢回答。

赞(0)
未经允许不得转载:TI中文支持网 » 各位大佬们,c2000 malloc失败是什么原因?
分享到: 更多 (0)