malloc()总是在ChibiOS中返回NULL

时间:2015-09-07 22:45:32

标签: embedded malloc chibios

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

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

  • 微控制器内存未满
  • size-1 malloc调用也会发生错误,因此内存块大小不是问题的原因。
  • errno电话之后,
  • ENOMEM始终为malloc()

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

当您查看_sbrkos/various/syscalls.c的定义时,如果ENOMEM,您可以清楚地看到它始终返回CH_CFG_USE_MEMCORE == FALSE错误。

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

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

#define CH_CFG_USE_MEMCORE                  TRUE

为避免遇到可靠性问题,您可能希望尽可能使用memory pools或替代算法。请参阅this detailed explanation,了解为什么malloc()在嵌入式系统上通常是个坏主意(在大多数嵌入式编码标准中,它实际上是被禁止的)。