2011-02-28 32 views
1

我正在使用MCB2300(使用LPC2378处理器)并使用keil uVision4。在我的程序中,我使用malloc()函数创建动态内存。由于所有动态内容都将存储在堆中,因此我需要确保分配所需的堆大小。我的启动文件(LPC2300.s)中堆的默认值是0x00000800。在我的应用程序中,我正在读取图像(bmp格式)并将像素值存储到矩阵中,并根据输入图像的大小动态创建矩阵。我在启动文件中可以设置的最大堆值是0x000072FF。对于堆的这个值,我能够成功读取44 x 33的图像。超出此大小的内存不会被分配。我需要至少有100个×100的尺寸来读取图像我的可用RAM为32K在Keil中提供更多堆

这是我的输出值后,我编译我的代码

程序大小:代码= 30664 RO-数据= 1220 RW-data = 132 ZI-data = 37628

如何提供额外的堆?

是否可以在SD/MMC卡或为LPC2378提供的外部存储库上存储堆内存。请帮我解决这个问题

回答

0

如果你的主板有外部RAM芯片,你可以用它来堆。 但是,如果没有外部RAM,则无法增加内部RAM大小以上的堆大小。

您可以编写一些虚拟内存驱动程序的变体,以使用SD/MMC卡作为内存设备。但是由于您的设备没有MMU(内存管理单元),因此您的驱动程序将非常复杂且极其缓慢。所以它不是一个选项。

此外,拥有28K的堆,您可以在那里容纳99x99 RGB24 BMP图像。 99 * 99 * 3 = 29403.