创建没有malloc的内存缓冲区

时间:2012-04-19 08:43:42

标签: c

我正在开发一个嵌入式系统(ARM Cortex M3),我无法访问任何类型的“标准库”。特别是,我无权访问malloc

我有一个函数void doStuff(uint8_t *buffer),它接受​​一个指向512位缓冲区的指针。我尝试过以下操作:

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

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

2 个答案:

答案 0 :(得分:5)

doStuff(buffer)即可,因为buffer 已经 uint8_t*

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


如果buffer的大小可变,您应该将大小传递给doStuff,如果它的大小不变,我也会传递大小,以防万一你改变大小

话虽如此,你应该采用以下方式:

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

答案 1 :(得分:1)

simplemalloc():有一个char mem [MAXMEM];和一个可自由的结构。然后编写自己的simplemalloc(),它在freetable中找到足够大的内存,并将偏移量返回到mem。 simplefree()然后会调整freetable。

EDITH:

如果你需要很多malloc(),你甚至可以将静态mem分配到不同的块中以用于不同的任务(一个块用于正好100byte的alloc,一个就像你最喜欢的struct的大小,依此类推)加快寻找免费记忆。

如果你缺少mem,你应该在simplemalloc()中实现bestmatch(),这会产生不良副作用,从而减慢执行速度。

如果你有足够的内存,你可以实现一个debugversion,它“分配”更多的内存并在开始之前和simplemalloc()ed mem结束之后放置XXX。在free()上你可以查看,如果这个XXX被破坏了,你知道你有一些缓冲区或流量不足,你可以知道。