首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在FreeRTOS中为线程安全重新定义malloc

在FreeRTOS中为线程安全重新定义malloc
EN

Stack Overflow用户
提问于 2014-06-10 12:48:00
回答 2查看 6.6K关注 0票数 5

我可以这样做吗?

代码语言:javascript
运行
复制
#ifdef FREERTOS

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

#endif

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-10 13:08:48

您可以根据需要使用custome malloc。你也已经做过了。

代码语言:javascript
运行
复制
#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,它将使用来自#include <stdlib.h>的内置malloc

同样,在“#”之前/之后放置这个选项有什么区别呢?

我说没什么区别。

票数 2
EN

Stack Overflow用户

发布于 2015-05-07 15:38:47

这将无法正常工作:

代码语言:javascript
运行
复制
#define malloc(size) pvPortMalloc(size)
#define free(ptr) pvPortFree(ptr)

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24141398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档