malloc() 在 ChibiOS 中总是 returns NULL

malloc() always returns NULL in ChibiOS

我有一个 ChibiOS 应用程序,我在其中通过 malloc() 使用动态内存分配。

但是,我观察到 100% 的时间我调用 malloc(),它 returns NULL。我已经确认:

我该如何解决这个问题?

当您查看 os/various/syscalls.c_sbrk 的定义时,您可以清楚地看到如果 CH_CFG_USE_MEMCORE == FALSE,它总是 returns 一个 ENOMEM 错误。

除非您在chconf.h中设置CH_CFG_USE_MEMCORE = TRUE,否则ChibiOS核心内存管理器将被完全禁用并且_sbrk和其他与内存相关的功能仅包含在目标文件中,因此没有链接发生错误。

为了正确配置ChibiOS,请确保在chconf.h中设置以下内容:

#define CH_CFG_USE_MEMCORE                  TRUE

为了避免 运行 陷入可靠性问题,您可能想使用 memory pools or alternative algorithms instead where possible. See this detailed explanation 来描述为什么 malloc() 在嵌入式系统上通常是个坏主意(实际上在完全符合大多数嵌入式编码标准)。