2014-06-10 55 views
2

我可以做这样的事情:重新定义线程安全的malloc在FreeRTOS操作系统

#ifdef FREERTOS 

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

#endif 

,并期望它始终调用pvPortMalloc()代替malloc()

另外,它会在#include <stdlib.h>之前/之后做出什么区别?

我有一些代码可以在FreeRTOS中运行,我想在使用FreeRTOS时将所有调用替换为malloc(),调用pvPortMalloc()

+0

可能重复[创建的malloc的包装功能,并用C无](http://stackoverflow.com/questions/262439/create- a-wrapper-function-for-malloc-and-free-in-c) –

+0

'pvPortMalloc'是为FreeRTOS分配内存的例程,它是用于堆分配的不同算法的.FreeRTOS内部使用它作为任务分配内存,队列等你可以用'#ifdef FREERTOS ...#endif'完成封装'malloc'。如果定义了'FREERTOS',它将'malloc'全部替换为'pvPortMalloc'。 –

回答

1

您可以根据您的要求使用custome 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操作系统不需要对define.So它将使用内置malloc#include <stdlib.h>

此外,它又有什么不同把这个前/“的#include”之后?

我说没有区别。

-1

这将无法正常工作:

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

如果用printf,sprintf的或其他一些功能从标准库,它会调用malloc_r,这是不保存线程!

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