我目前正在评估运行在Cortex M4F上的SEGGER的embOS。它有128KB的内部RAM和2MB的外部RAM,所以我知道我有足够的内存。
我的程序使用了一些动态分配(是的,我知道在嵌入式系统上不推荐这样做)。
在开始我的任务时,我尝试调用malloc/OS_malloc,其中的OS_malloc是embOS提供的线程安全版本。在这两种情况下,malloc都会失败并返回空指针。
当在操作系统启动前执行相同的malloc/OS_malloc时,它可以正常工作:
**//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,我看到了同样的行为。你知道为什么会发生这种情况吗?
发布于 2013-07-17 19:24:19
我想我正在去解决这个问题。
看起来链接器脚本中的设置:
_Min_Heap_Size = 0x19000;/*所需堆数量*/ _Min_Stack_Size = 0x200;/*所需堆栈数量*/
而不是:
_Min_Heap_Size = 0x00;/*所需堆数量*/ _Min_Stack_Size = 0x200;/*所需堆栈数量*/
发布于 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负责的。
https://stackoverflow.com/questions/17676816
复制相似问题