我目前正在评估 SEGGER 在 Cortex M4F 上运行的 embOS。它有 128 KB 的内部 RAM 和 2 兆字节的外部 RAM,所以我知道我有足够的内存。
我的程序使用了一些动态分配(是的,我知道在嵌入式系统上不建议这样做)。
在开始我的任务时,我试图调用embOS 提供malloc/OS_malloc
的OS_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,我看到了同样的行为。任何想法为什么会发生这种情况?