2

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

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

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

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

4

2 回答 2

5

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

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


如果buffer是可变大小,你也应该传递大小doStuff,如果它是恒定大小,我也会传递大小,以防你有一天改变大小。

话虽这么说,你应该这样做:

uint8_t buffer[64] = {0};
int     len        = 64;
doStuff(buffer, len);
于 2012-04-19T09:00:15.897 回答
1

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

伊迪丝:

如果你需要很多 malloc()s,你甚至可以将你的静态内存分成不同的块用于不同的任务(一个块用于正好 100 字节的分配,一个用于你最喜欢的结构的大小,等等)这将加快查找速度免费内存。

如果你缺少内存,你应该在 simplemalloc() 中实现一个 bestmatch(),它的副作用是会减慢执行速度。

如果你有足够的内存,你可以实现一个调试版本,它“分配”更多的内存,并将 XXX 放在 simplemalloc() ed mem 的开始之前和结束之后。在 free() 上,您可以检查此 XXX 是否损坏,因此您知道您有一些缓冲区溢出或下溢,您可以意识到这一点。

于 2012-04-19T09:15:49.903 回答