【问题标题】:malloc() always returns NULL in ChibiOSmalloc() 在 ChibiOS 中总是返回 NULL
【发布时间】:2015-12-03 11:53:43
【问题描述】:

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

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: embedded malloc chibios


    【解决方案1】:

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

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

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

    #define CH_CFG_USE_MEMCORE                  TRUE
    

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

    【讨论】:

      猜你喜欢
      • 2012-11-18
      • 1970-01-01
      • 2015-06-14
      • 2016-05-24
      • 2021-09-16
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      相关资源
      最近更新 更多