首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式RTOS和使用malloc/free

嵌入式RTOS和使用malloc/free
EN

Stack Overflow用户
提问于 2013-07-16 20:42:00
回答 2查看 1.4K关注 0票数 0

我目前正在评估运行在Cortex M4F上的SEGGER的embOS。它有128KB的内部RAM和2MB的外部RAM,所以我知道我有足够的内存。

我的程序使用了一些动态分配(是的,我知道在嵌入式系统上不推荐这样做)。

在开始我的任务时,我尝试调用malloc/OS_malloc,其中的OS_malloc是embOS提供的线程安全版本。在这两种情况下,malloc都会失败并返回空指针。

当在操作系统启动前执行相同的malloc/OS_malloc时,它可以正常工作:

代码语言:javascript
复制
**//Malloc here does not fail**
OS_IncDI();                      /* Initially disable interrupts  */
**//Malloc here does not fail**
OS_InitKern();                   /* Initialize OS                  */
**//Malloc here does  fail !!**
OS_InitHW();                     /* Initialize Hardware for OS    */

OS_CREATETASK(&TCBHP, "My Task", HPTask, 50, StackHP); //**<--And off course malloc failes inside teh task also**

OS_Start();

我去尝试使用MICRIUM的uCOS,我看到了同样的行为。你知道为什么会发生这种情况吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-17 19:24:19

我想我正在去解决这个问题。

看起来链接器脚本中的设置:

_Min_Heap_Size = 0x19000;/*所需堆数量*/ _Min_Stack_Size = 0x200;/*所需堆栈数量*/

而不是:

_Min_Heap_Size = 0x00;/*所需堆数量*/ _Min_Stack_Size = 0x200;/*所需堆栈数量*/

票数 0
EN

Stack Overflow用户

发布于 2013-07-16 20:51:59

在以下情况下,malloc可能会返回失败

1)Running out of memory,但正如你所说,我有足够的内存,所以情况并非如此。

2)malloc is not able to allocate contiguous memory of requested size

我猜你的案子是由选项2负责的。

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

https://stackoverflow.com/questions/17676816

复制
相关文章

相似问题

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