0

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

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

在开始我的任务时,我试图调用embOS 提供malloc/OS_mallocOS_malloc线程安全版本。在这两种情况下,都malloc失败并返回 NULL 指针。

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,我看到了同样的行为。任何想法为什么会发生这种情况?

4

2 回答 2

1

我认为我正在解决问题的路上。

似乎链接器脚本中的设置:

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

代替 :

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

于 2013-07-17T11:24:19.383 回答
0

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

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

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

我猜选项 2 对您的情况负责。

于 2013-07-16T12:51:58.937 回答