我正在为内存非常有限的微处理器编程设计,我必须在不同的功能中使用“大量”内存。我不能有一个大的堆栈段,堆段,数据段,我必须选择哪个做大,哪个做小。我有大约32KB的总数,我应该让堆栈段很大还是堆段很大?
我使用大约20KB的文本段,这给我剩下12KB。我需要一个4KB的缓冲区来传递不同的功能(SPI闪存扇区大小)。应该在哪里初始化那个大缓冲区?
所以我的选择是:
1)如果我宣布在函数开头的缓冲区,堆栈将需要进行大量
spiflash_read(...)
{
u8 buffer[4096]; // allocated on stack
syscall_read_spi(buffer,...)
}
2)分配动态,堆会需要进行大
spiflash_read(...)
{
u8 *buffer = (u8*) malloc(4096); // allocated in heap
syscall_read_spi(buffer,...)
}
3)分配静态,巨大的一面,不能在“SPI库”之外使用。
static u8 buffer[4096]; // allocated in data section.
spiflash_read(...)
{
syscall_read_spi(buffer,...)
}
我的问题是这是实现该设计的最佳方法是什么?有人能解释推理吗?
为什么你需要一个4KB缓冲区来读取闪存?我曾在许多具有相似内存的系统上工作,但我从来不需要处理大型的单个缓冲区。你大概可以设计你的代码,不需要传递整个闪存扇区。 – TJD 2012-03-14 20:38:49
“文本”段包含代码和常量数据,在通常由只读存储器执行的受限制系统上。为什么你有20K的RAM用于这个目的? – Clifford 2012-03-14 20:46:22
@TJD我正在使用一个4kB子扇区的闪光灯,您无法擦除任何东西,也请注意,您无法写入之前未擦除的位置。所以如果我做了写操作,我必须读取4kB,修改我打算写入的部分,擦除整个扇区然后写回4kB。 – user968102 2012-03-14 21:44:19