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

使用函数malloc分配内存

Other Parts Discussed in Thread:SYSBIOS

工程师好,请问一下,我使用malloc函数给一些变量分配了内存,总共大约需要1M的空间,程序编译的时候没有错误,但是执行的时候就会跳入EXIT.C,目前检测过了heap.size的大小设置的也足够,内存使用完后也进行free了,请问还能哪些地方有问题呢?

Nancy Wang:

可以单步调试看到程序跑到哪里会进入EXIT.C吗?

,

Shine:

请问如果分配小于1M内存也有这个问题吗?

,

user6520474:

目前已经确认就是调用malloc函数的时候进入exit.c

,

user6520474:

在cfg文件里面分配好了 heapsize的大小,但是编译后看生成的cmd文件,heap的大小是0,无论cfg文件里面怎么改,cmd文件里面的heap的大小都是0

,

user6520474:

我用的sys BIOS,cfg文件里面已经配置好了heapsize的大小,对应malloc需要的空间来说是足够大的,但是编译生成cmd文件以后,在看里面的heap的大小就变成0了,无论cfg文件里面修改成啥,cmd文件里的heap大小都是0

,

Nancy Wang:

看一下生成的map文件中.sysmem的大小确认一下。
试试看减少malloc的调用次数,有没有同样的问题。

,

user6520474:

感谢您的回复,我检查了SECTION ALLOCATION MAP,发现根本没有.sysmem的段,我感觉可能因为是cmd文件里面的heap大小都是0了,就没有分配system段

,

Nancy Wang:

可能是cfg中配置的没有生效。
试试看:
var BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.heapSize = 0x900;
BIOS.heapSection = "systemHeap";

,

user6520474:

我在cfg文件里面添加了您的命令,结果cmd文件里面的heap大小还是0,然后map里面也没有system段,太奇怪了。我在工程-属性-c6000连接器那个地方也修改了heapsize的大小,也无效。主要是是sysbios的cmd文件是根据cfg文件自动生成的,本身没法修改,外部改的东西到cmd里面就无效了,太奇怪了

,

user6520474:

系统栈Program.stack是能按照cfg文件正确生成的,但是heap就不行

,

user6520474:

我刚才rebuild了一下。map里面出现了这个,cmd里面的heap大小还是0
systemHeap
*01170000000009000UNINITIALIZED1170000000009000app_pe674.oe674 (systemHeap)
可是这也没有分给我的malloc函数好像

,

Nancy Wang:

如果map文件里生成了就可以了。
0x1170 0000指向 DSP L2 ROM,需要重新在cmd中给systemHeap一个可用的地址空间。
heap大小再根据实际情况修改一下。

,

user6520474:

可是我在平台文件里面配置的代码数据堆栈都是放在ddr里面的,cmd文件里也算显示load到ddr的(.sysmem: load > DDR),为什么map里面的地址是在L2里面啊?
SECTIONS
{.text: load >> DDR.ti.decompress: load > DDR.stack: load > DDRGROUP: load > DDR{.bss:.neardata:.rodata:}.cinit: load > DDR.pinit: load >> DDR.init_array: load > DDR.const: load >> DDR.data: load >> DDR.fardata: load >> DDR.switch: load >> DDR.sysmem: load > DDR.far: load >> DDR.args: load > DDR align = 0x4, fill = 0 {_argsize = 0x0; }.cio: load >> DDR.ti.handler_table: load > DDR.c6xabi.exidx: load > DDR.c6xabi.extab: load >> DDR.vecs: load > DDRxdc.meta: load > DDR, type = COPY

}

,

user6520474:

谢谢您,因为我用的sysbios,dsp的cmd文件是自动生成的,改cmd文件是没用的,又如何才能在cmd中给systemHeap一个可用的地址空间呢?

,

Nancy Wang:

请看 7.3.3 Providing a Supplemental Linker Command File
www.ti.com/…/spruex3v.pdf

赞(0)
未经允许不得转载:TI中文支持网 » 使用函数malloc分配内存
分享到: 更多 (0)