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