stm32 - 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 功能。
解决方案
不要使用malloc。请改用 freeRTOS malloc 函数。如果你使用 malloc 它使用链接描述文件中定义的标准堆,通常大约 0x200 字节长
两个系列中的任何一个的内存消耗都是相同的。这只是您的代码的问题
家族之间的移植比仅更改定义更复杂。您还必须修改链接器脚本,更改包含的 cmsis 标头,很可能您的程序也是如此
推荐阅读
- string - ${0##/} 在函数外有效,但在函数内无效
- pentaho - CSV 输入将列跳过到错误的字段名称中
- javascript - 如何在数据库中显示 BLOB 图像?
- excel - 如何从 .txt 文件转换为 .xlsx?
- javascript - 如何在 React 中更改嵌套对象内的状态
- racket - 使用 for 循环迭代列表(Racket)
- javascript - 使用 Fetch 获取 JSON 值并输出为 html 中的文本时遇到问题
- python - 将时间序列数据重新采样到选定的时间间隔(10 天)
- ios - SwiftUI 紧凑字体
- php - 为什么我的表中的会话 ID 变为 0?