在 FreeRTOS 中重新定义 malloc 以实现线程安全

jay*_*jay 5 c malloc std freertos c-preprocessor

我可以做这样的事情吗:

#ifdef FREERTOS

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

#endif
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jay*_*hoi 2

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

#ifdef FREERTOS

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

#endif
Run Code Online (Sandbox Code Playgroud)

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

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

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

我说没有什么区别。