0

我有一个ChibiOS应用程序,我通过malloc().

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

  • 单片机内存未满
  • 大小为 1 的 malloc 调用也会发生该错误,因此内存块大小不是问题的原因。
  • errno总是ENOMEMmalloc()通话后

我该如何解决这个问题?

4

1 回答 1

1

当您查看 in 的定义时_sbrkos/various/syscalls.c您可以清楚地看到它总是返回ENOMEM错误 if CH_CFG_USE_MEMCORE == FALSE

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

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

#define CH_CFG_USE_MEMCORE                  TRUE

为了避免遇到可靠性问题,您可能希望尽可能使用内存池或替代算法。请参阅此详细说明,了解为什么malloc()在嵌入式系统上通常是一个坏主意(实际上在大多数嵌入式编码标准中完全禁止这样做)。

于 2015-09-07T22:45:31.970 回答