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

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

现记录解决过程如下

【LM401 专栏系列文章】

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

1.问题描述

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

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

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

image-20230330151152684

t提示内存不够:

image-20230330151214428

2. 问题定位

2.1 MCU 内存信息

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

  • FLASH
    128Kb
  • RAM 48Kb

2.2 查看代码运行内存情况

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

img

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

2.3 应用程序的内存分区

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

img

3. 问题解决

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

image-20230330151541606

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

image-20230330151555636

4. 关于RAM 与堆栈

堆(Heap)、栈(Stack)

image-20230330154258020

注意:

  • 栈:系统分配,执行速度快,内存连续,声明变量就自动开辟空间
  • 堆:用户申请,执行速度,内存不连续,用户申请时,系统通过链表将不连续的内存串在一起使用
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步、至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值