4

我可以做这样的事情:

#ifdef FREERTOS

#define malloc(size) pvPortMalloc(size)
#define free(ptr) pvPortFree(ptr)

#endif

并期望它总是调用pvPortMalloc()而不是malloc()?

另外,将它放在之前/之后会有什么区别#include <stdlib.h>

我有一些代码想在 FreeRTOS 内外运行,我想用使用 FreeRTOS 时的调用替换所有malloc()调用。pvPortMalloc()

4

2 回答 2

2

您可以malloc根据您的要求使用客户。你也已经做到了。

#ifdef FREERTOS

#define malloc(size) pvPortMalloc(size)
#define free(ptr) pvPortFree(ptr)

#endif

因此,当您想在 FreeRTOS 中使用代码时,请定义FREERTOS标志。因此它将pvPortMalloc用于由 freeRTOS 从不同的堆管理方案(heap_1.c、heap_2.c、heap_3.c 或 heap_4.c)定义的内存分配。

没有 FreeRTOS 不需要定义。所以它将使用 malloc内置#include <stdlib.h>

另外,将它放在“#include”之前/之后会有什么区别?

我说没有区别。

于 2014-06-10T13:08:48.670 回答
0

这将无法正常工作:

#define malloc(size) pvPortMalloc(size)
#define free(ptr) pvPortFree(ptr)

如果您使用标准库中的 printf、sprintf 或其他一些函数,它将调用 malloc_r,这不会为线程保存!

然而,我不知道如何重新定义 malloc 和 free

于 2015-05-07T15:38:47.510 回答