我正在开发一个嵌入式系统(ARM Cortex M3),我无法访问任何类型的“标准库”。特别是,我无权访问malloc
。
我有一个函数void doStuff(uint8_t *buffer)
,它接受一个指向512位缓冲区的指针。我尝试过以下操作:
uint8_t buffer[64] = {0};
doStuff((uint8_t *) &buffer));
但我没有得到预期的结果。难道我做错了什么?有没有替代方法?
答案 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被破坏了,你知道你有一些缓冲区或流量不足,你可以知道。