2012-04-19 99 views
2

我正在开发一个嵌入式系统(ARM Cortex M3),我无法访问任何类型的“标准库”。特别是,我无权访问malloc在没有malloc的情况下创建内存缓冲区

我有一个函数void doStuff(uint8_t *buffer),它接受指向512位缓冲区的指针。我试图做以下几点:

uint8_t buffer[64] = {0}; 
doStuff((uint8_t *) &buffer)); 

但我没有得到预期的结果。难道我做错了什么?有其他方法吗?

回答

5

doStuff(buffer)应该没问题,因为buffer已经是uint8_t*

除此之外,在您的示例中&buffer之后,您会关闭一个括号。


如果buffer是大小可变的,你应该通过大小为doStuff过,如果是固定大小的,我也想通过大小正好,你改变大小1天情况。

这是说,你应该这样做以下方式:

uint8_t buffer[64] = {0}; 
int  len  = 64; 
doStuff(buffer, len); 
1

一个simplemalloc():有一个char MEM [MAXMEM]和一个可以自由结构的结构。然后编写你自己的simplemalloc(),它可以找到足够大的内存垃圾,并将偏移量返回给mem。 simplefree()然后会调整可释放的。

EDITH:

,如果你需要大量的malloc()S,你甚至可以devide您的静态MEM成不同的任务不同的块(一个块整整100byte allocs,一个堡垒自己喜欢的结构的大小等等),这将加速寻找空闲的mem。

如果你是短MEM的,你应该实现在simplemalloc一个bestmatch()(),这是一个坏sideeffect减慢执行下去。

,如果你有足够的内存,你可以实现一个debugversion,其中“分配”有点更多的内存和开始前和simplemalloc()的MEM结束后提出XXX。在免费()你可以检查,如果这个XXX是坏的,所以你知道你有一些缓冲区溢出或流量不足,你可以知道。

+0

+1用于推荐自定义内存池的实现 – eckes 2012-04-19 09:40:15

相关问题