cortex-M3和cortex-M7的SRAM消耗

时间:2019-06-25 02:12:23

标签: stm32 stm32f4 stm32f7 stm32f0

我从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相比,它的堆容量增加了大约三倍,但使用MALLOC函数的功能仍然很少。

即使M7的内存是M3的四倍左右,我也不明白为什么会有如此多的内存丢失。如果有人有此经验,请给我很好的建议。我正在将FreeRTOS,LWIP和HAL用于STM32。 我想充分使用Malloc函数。

2 个答案:

答案 0 :(得分:2)

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

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

  3. 系列之间的移植比仅更改定义更为复杂。您还必须修改链接程序脚本,更改包含的cmsis标头,并且很有可能更改您的程序

答案 1 :(得分:1)

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