当前位置: 首页 > news >正文

【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 内存空间

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

注意:

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

相关文章:

  • 【Python】ChineseCalendar包简介
  • 前端八股——JS高级学习
  • 【CSS系列】第二章 · CSS选择器
  • vue尚品汇商城项目-day04【27.分页器静态组件(难点)】
  • JavaScript技术干货第二弹,有需自取!
  • 华为OD机试用java实现 -【关联子串】
  • 走过最长的路是ChatGPT的套路,信过最真的话是Adobe的Firefly
  • 基于蓄电池进行调峰和频率调节研究【超线性增益的联合优化】(Matlab代码实现)
  • 华为OD机试用Python实现 -【打折买水果】
  • 深入浅出 Fast DDS网络协议(入门篇)
  • 【简陋Web应用2】人脸检测——基于Flask和PaddleHub
  • 基于springboot实现数码论坛系统设计与实现演示【附项目源码+论文说明】
  • 深入理解NLP中的文本匹配任务
  • 关于uview2.0计步器最大值赋值问题
  • Spring cloud 限流的多种方式
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • axios 和 cookie 的那些事
  • Consul Config 使用Git做版本控制的实现
  • leetcode98. Validate Binary Search Tree
  • nginx 负载服务器优化
  • Travix是如何部署应用程序到Kubernetes上的
  • tweak 支持第三方库
  • Webpack 4x 之路 ( 四 )
  • 好的网址,关于.net 4.0 ,vs 2010
  • 如何设计一个比特币钱包服务
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 赢得Docker挑战最佳实践
  • 云大使推广中的常见热门问题
  • # 飞书APP集成平台-数字化落地
  • (12)Linux 常见的三种进程状态
  • (23)Linux的软硬连接
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (数据结构)顺序表的定义
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)Scala的“=”符号简介
  • (转)大型网站架构演变和知识体系
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • *上位机的定义
  • .Net mvc总结
  • .NET Remoting学习笔记(三)信道
  • .NET 中的轻量级线程安全
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [BZOJ1053][HAOI2007]反素数ant
  • [C++] 小游戏 斗破苍穹 2.11.6 版本 zty出品
  • [CTF]2022美团CTF WEB WP
  • [DevOps云实践] 彻底删除AWS云资源
  • [docker]docker网络-直接路由模式
  • [Linux] 一文理解HTTPS协议:什么是HTTPS协议、HTTPS协议如何加密数据、什么是CA证书(数字证书)...
  • [Linux]文件基础-如何管理文件
  • [Linux打怪升级之路]-vim编辑器(看就能马上操作噢)
  • [MySQL数据库部署及初始化相关]
  • [New Portal]Windows Azure Virtual Machine (3) 在VM上挂载磁盘