我正在开发一个嵌入式系统(ARM Cortex M3),我无法访问任何类型的“标准库”。特别是,我无法访问malloc
.
我有一个函数void doStuff(uint8_t *buffer)
接受指向 512 位缓冲区的指针。我尝试过执行以下操作:
uint8_t buffer[64] = {0};
doStuff((uint8_t *) &buffer));
但我没有得到预期的结果。难道我做错了什么?有没有替代方法?
我正在开发一个嵌入式系统(ARM Cortex M3),我无法访问任何类型的“标准库”。特别是,我无法访问malloc
.
我有一个函数void doStuff(uint8_t *buffer)
接受指向 512 位缓冲区的指针。我尝试过执行以下操作:
uint8_t buffer[64] = {0};
doStuff((uint8_t *) &buffer));
但我没有得到预期的结果。难道我做错了什么?有没有替代方法?
doStuff(buffer)
应该没问题,因为buffer
已经是uint8_t*
.
&buffer
除此之外,在您的示例之后,您关闭了一个括号太多。
如果buffer
是可变大小,你也应该传递大小doStuff
,如果它是恒定大小,我也会传递大小,以防你有一天改变大小。
话虽这么说,你应该这样做:
uint8_t buffer[64] = {0};
int len = 64;
doStuff(buffer, len);
一个 simplemalloc(): 有一个 char mem[MAXMEM]; 和一个结构自由表。然后编写自己的 simplemalloc(),在 freetable 中找到足够大的内存垃圾,并将偏移量返回到 mem。simplefree() 然后会调整 freetable。
伊迪丝:
如果你需要很多 malloc()s,你甚至可以将你的静态内存分成不同的块用于不同的任务(一个块用于正好 100 字节的分配,一个用于你最喜欢的结构的大小,等等)这将加快查找速度免费内存。
如果你缺少内存,你应该在 simplemalloc() 中实现一个 bestmatch(),它的副作用是会减慢执行速度。
如果你有足够的内存,你可以实现一个调试版本,它“分配”更多的内存,并将 XXX 放在 simplemalloc() ed mem 的开始之前和结束之后。在 free() 上,您可以检查此 XXX 是否损坏,因此您知道您有一些缓冲区溢出或下溢,您可以意识到这一点。