一直以来,我在写arm程序的时候,都是避免使用malloc函数。这一次要用yaffs文件系统,没有办法只好研究一下malloc函数。
要用malloc函数需要指定堆栈的位置和大小,我的硬件环境中有SDRAM,所以我想让malloc函数在sdram中分配空间,首先要指定堆栈的开始地址。在keil中打开系统的sct文件,在我硬件环境中时Emc_Yaffs.sct,其内容如下:
LR_IROM1 0x00000000 0x00080000 { ; load region size_region
ER_IROM1 0x00000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x10000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x20004000 0x00004000 {
.ANY (+RW +ZI)
}
}
ARM_LIB_HEAP 0xA0000000 0x200000 { ;
RW_HEAP 0xA0000000 0x200000 {
.ANY (HEAP)
}
}
在文件的最后部分,ARM_LIB_HEAP 0xA0000000 0x200000 { //指定堆栈区的大小
RW_HEAP 0xA0000000 0x200000 {
.ANY(HEAP)
}
} 指定了堆栈区的大小,其中0xA0000000 是堆栈的开始地址,0x200000 指定了堆栈区的最大范围。
通过修改这部分的的内容可以变更堆栈的开始地址。
之后就是在启动文件中 变更堆栈大小的定义。使其在刚才指定的大小之内。
阅读(4044) | 评论(0) | 转发(0) |