【lm401】解决malloc动态申请内存时内存不足的问题

使用 lm401 模组,基于STM32WLE5 调试时,遇到 malloc 分配内存提示内存不足

现记录解决过程如下

【LM401 专栏系列文章】

【LoRaWAN_End_Node】基于LoRaWAN模组代码解析

【lm401】解决malloc动态申请内存时内存不足的问题

  • 1.问题描述
  • 2. 问题定位
    • 2.1 MCU 内存信息
    • 2.2 查看代码运行内存情况
    • 2.3 应用程序的内存分区
  • 3. 问题解决
  • 4. 关于RAM 与堆栈

1.问题描述

lm401 模组驱动墨水屏,具体参考博客:【LM401】STM32WLE5+SPI接口驱动 2.66inch e-paper 墨水屏

墨水屏显示时,需要先申请一大段内存空间,由于模组还使用LoRaWAN功能,因此malloc申请内存时,提示申请失败。

代码重现:查看代码,程序向堆栈malloc申请 296 * 152 / 8 / 1024 = 5.5 kb 大约 5.5 kb 内存空间

【lm401】解决malloc动态申请内存时内存不足的问题_第1张图片

t提示内存不够:

【lm401】解决malloc动态申请内存时内存不足的问题_第2张图片

2. 问题定位

2.1 MCU 内存信息

STM32WLE5xB 板载信息,如下。 48kb 的RAM 不可能不够用,怎么回事呢?

  • FLASH
    128Kb
  • RAM 48Kb

2.2 查看代码运行内存情况

在 STMCube IDE 中查看内存情况,在 Build Analyzer 窗口的 Memory Regions 查看

【lm401】解决malloc动态申请内存时内存不足的问题_第3张图片

可以看到还有 4.53kb 的ram 空间,我需要申请5.5kb的空间,肯定是不够用的,问题定位成功。

2.3 应用程序的内存分区

查看 STM32WLE5CBUX_FLASH.ld 文件,可以看到内存分配的文件:

【lm401】解决malloc动态申请内存时内存不足的问题_第4张图片

3. 问题解决

解决:更改一下RAM的大小,修改结果如下。

【lm401】解决malloc动态申请内存时内存不足的问题_第5张图片

运行代码,不再提示内存不够用了。

【lm401】解决malloc动态申请内存时内存不足的问题_第6张图片

4. 关于RAM 与堆栈

堆(Heap)、栈(Stack)

【lm401】解决malloc动态申请内存时内存不足的问题_第7张图片

注意:

  • 栈:系统分配,执行速度快,内存连续,声明变量就自动开辟空间
  • 堆:用户申请,执行速度,内存不连续,用户申请时,系统通过链表将不连续的内存串在一起使用

你可能感兴趣的:(【LM401,系列】,单片机,stm32,嵌入式硬件)