首页 > 解决方案 > cortex-M3 和 cortex-M7 的 SRAM 消耗

问题描述

我从 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 功能。

标签: stm32stm32f4stm32f7stm32f0

解决方案


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

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

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


推荐阅读