1

我从 M3 迁移到 M7。M3 使用 STM32F103VE,具有 64 KB 的 SRAM。M7 是 STM32F746ZG,它有 240KB 的 SRAM。我将大部分 M3 代码移至 M7。附加 LWIP 用于 M7 中的以太网功能。但我发现堆内存不足并增加如下。

#define configTOTAL_HEAP_SIZE ( ( size_t ) (42 * 1024 ) )

使用 M3 时,使用了以下堆大小。

#define configTOTAL_HEAP_SIZE ( ( size_t ) (15 * 1024 ) )

如果我使用M3的堆大小,就会出现问题,因为堆内存不足。如果我将堆大小设置为 45*1024,则以太网功能不起作用并且不会增加堆内存。我知道增加堆会减少堆栈。不过,虽然相比 M3 增加了 3 倍左右的 Heap,但使用 MALLOC 功能的余地仍然不多。

尽管 M7 的内存是 M3 的四倍,但我不明白为什么会有这么多的内存损失。如果有人有过这样的经历,请给我好的建议。我正在为 STM32 使用 FreeRTOS、LWIP 和 HAL。我想充分使用 Malloc 功能。

4

2 回答 2

2
  1. 不要使用malloc。请改用 freeRTOS malloc 函数。如果你使用 malloc 它使用链接描述文件中定义的标准堆,通常大约 0x200 字节长

  2. 两个系列中的任何一个的内存消耗都是相同的。这只是您的代码的问题

  3. 家族之间的移植比仅更改定义更复杂。您还必须修改链接器脚本,更改包含的 cmsis 标头,很可能您的程序也是如此

于 2019-06-25T07:11:14.153 回答
1

您可以(并且应该!)配置 LWIP 以使用它的内部内存管理器而不是 malloc。例如,参见http://www.nongnu.org/lwip/2_1_x/mem_8c.html 。

于 2019-06-25T14:48:07.873 回答