1

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

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

程序大小: Code=30664 RO-data=1220 RW-data=132 ZI-data=37628

如何提供额外的堆?

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

4

1 回答 1

0

如果您的主板有外部 RAM 芯片,您可以将其用于堆。但是,如果没有外部 RAM,则无法将堆大小增加到内部 RAM 大小之上。

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

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

于 2011-12-27T15:14:02.957 回答