我开发c6678程序,程序中用malloc分配很多动态内存,内部存储不够用,能不能在cmd文件中设置把堆内存分配到外部sram中或ddr中?我试过,.sysmem分配到外部后,malloc返回的地址是0,不能分配,不知道怎么回事?还有堆内存分配大小有限制吗?
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.
我开发c6678程序,程序中用malloc分配很多动态内存,内部存储不够用,能不能在cmd文件中设置把堆内存分配到外部sram中或ddr中?我试过,.sysmem分配到外部后,malloc返回的地址是0,不能分配,不知道怎么回事?还有堆内存分配大小有限制吗?
这是cmd文件
-stack 0x4000
-heap 0x400000
MEMORY
{
BOOT: o=0x00800000 l=0x00000200//中断向量表
INITIAL: o=0x00800200 l=0x00000200//初始化寄存器,搬移4KB以外的程序
// CONFIG: o=0x00800400 l=0x00001000//关闭L1D cache(MSMC的ram默认可被L1 cache);配置外存等,主要是ddr
DATA: o=0x00800400 l=0x00000400//原始数据,作为程序数据搬移、测试的源
L2: o=0x00800800 l=0x0007f800//主程序
MSMC0: o=0x0c000000 l=0x00400000
// MSMC1: o=0x0c300000 l=0x00100000
/*MSMC0: o=0x80000000 l=0x00100000
MSMC1: o=0x80100000 l=0x00100000*/
// MSMC2: o=0x0c200000 l=0x00100000
// MSMC3: o=0x0c300000 l=0x00100000
EMIFCE0: o=0x70000000 l=0x00400000
DDR3: o=0x80000000 l=0x80000000
}
SECTIONS
{
vecs > BOOT
initial > INITIAL
config > L2
data > DATA
.test > L2
.fardata > L2
.stack > L2
.text > L2
.cinit > L2
.bss > L2
.cio > L2
.const > L2
.far > L2
.sysmem > DDR3
.switch > L2
.neardata > L2
// .MSMC0 > MSMC0
// .MSMC1 > MSMC1
// .MSMC2 > MSMC2
.MSMC3 > EMIFCE0
}
下面是map文件节选
70000000 70000000 0010ddc3 00000000 rw- .MSMC3
80000000 80000000 00400000 00000000 rw-
80000000 80000000 00400000 00000000 rw- .sysmem
我主程序一运行ddr初始化函数是,程序就崩溃了,
如果.sysmem > DDR3改成 .sysmem > MSMC0,就可以