1

我想在 上分配一些内存mm_heap,但它的大小为零: debug mm_heap

这会导致内存分配失败。我该如何调试这个问题?

作为参考,我在 STM32F765 上使用 Nuttx。

4

2 回答 2

3

堆大小为零,因为没有任何东西添加到堆中。您可以看到这一点,因为内存区域 (mm_nregions) 的数量也为零。

内存区域由 mm_initialize() 中的 mm_addregion() 添加到堆中;保证至少被调用一次以添加至少一个内存区域。如果内存区域的数量为零,则此函数由于某种原因而失败。

函数失败的唯一方法是传递了错误的参数。参数的传递基于您正在使用的 up_allocateheap() 实现提供的参数。

因此,您必须查看 up_allocateheap() 以了解正在传递的内容。可能会在 mm_addregion() 中设置一个断点,以准确查看它对什么不满意。

于 2019-06-09T02:47:32.937 回答
0

非常感谢您的回答。

我能够解决这个问题。

我的程序中的 stm32_boot.c 和 stm32_appinitialize.c 有一点混淆(复制粘贴错误)。

此外,我还没有在 menueconfig -> RTOS Features -> RTOS hooks 中激活“BOARD_LATE_INITIALIZE”。

因此,在初始化堆之前调用了GPIO初始化函数,这导致了我在问题中描述的错误。

于 2019-06-10T14:02:48.177 回答