cortex-M3 和 cortex-M7 的 SRAM 消耗

Consumption of SRAM for cortex-M3 and cortex-M7

我从 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的heap size,会出现问题,因为heap内存不足。如果我将堆大小设置为 45*1024,则以太网功能不起作用并且不会增加堆内存。我知道增加堆会减少堆栈。不过虽然比M3增加了3倍左右的Heap,但还是没有太多可以使用MALLOC的功能。

虽然M7的内存是M3的四倍左右,但我不明白为什么内存会损失那么多。如果有人有过这种经历,请给我好的建议。我正在为 STM32 使用 FreeRTOS、LWIP 和 HAL。 我想充分利用Malloc函数

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

  2. 两个系列的内存消耗是一样的。只是你的代码有问题

  3. 系列之间的移植比仅更改定义更复杂。您还必须修改链接描述文件,更改包含的 cmsis headers 并且很可能您的程序也是如此

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