内存优化

  • 内存优化
    • 优化措施
      • 1 修改 SPI RAM config
      • 2 修改 BLE 的配置
      • 3 检查是否有较大的全局变量
      • 4 动态申请的空间调试
      • 5 任务的栈的大小

内存优化

ESP32 内部 SRAM 有 520KB,但是系统启动后可用内存约为 300KB(以 Hello World 工程为例),很多物联网应用都会使用 Wi-Fi 连接云端/ Bluetooth 和手机通信/ OTA 升级等功能,可能会面临内存不足问题。尽管 ESP32 可以外挂 PSRAM,为了节省成本,可以不使用 PSRAM 当然最佳。

优化措施

1 修改 SPI RAM config

2 修改 BLE 的配置

如果有打开蓝牙功能,可以关闭没有使用到的蓝牙部分功能。如图:

3 检查是否有较大的全局变量

使用 make size-components 查看生成的固件内存使用情况, 查看你的模块中是否存在较大的全局变量

total sizes:DRAM .data size:   13272 bytesDRAM .bss  size:   34024 bytes
Used static DRAM:   47296 bytes (  77284 available, 38.0% used)
Used static IRAM:   96352 bytes (  34720 available, 73.5% used)Flash code: 1101719 bytesFlash rodata:  267772 bytes
Total image size:~1479115 bytes (.bin may be padded larger)
Per-archive contributions to ELF file:Archive File DRAM .data & .bss   IRAM Flash code & rodata   Totallibbt.a        325   2338    460     155773    53596  212492libmesh.a        186   3636      0     161096    38471  203389libnet80211.a        924   8906   3782     111740    13750  139102libmbedtls.a        100    268     30     108099    19263  127760liblwip.a         19   4172      0      89540    16876  110607libc.a          0     20      0      85809     6516   92345
...
  1. DRAM: 链接器将非常量静态数据和未初始化数据放入 0x3FFB0000 — 0x3FFF0000 这 256kB 的区域。注意,如果使用蓝牙堆栈,此区域会减少 64kB(通过将起始地址移至 0x3FFC0000 )。如果使用了内存跟踪的功能,该区域的长度还要减少 16kB 或者 32kB。放置静态数据后,留在此区域中的剩余空间都用作运行时堆。常量数据也可以放在 DRAM 中,需要使用 DRAM_ATTR 宏来声明。

    • bss: 未初始化的全局变量。
    • data: 已初始化的全局变量。
  2. IRAM: ESP-IDF 将内部 SRAM0 区域(在技术参考手册中有定义)的一部分分配为指令 RAM。除了开始的 64kB 用作 PRO CPU 和 APP CPU 的高速缓存外,剩余内存区域(从 0x40080000 至 0x400A0000 )被用来存储应用程序中部分需要在 RAM 中运行的代码。

4 动态申请的空间调试

  1. 重定义 内存 分配函数,实现分配记录
  2. 在运行过程中打印内存的分配情况
  3. 分析、修改代码实现内存及时回收

5 任务的栈的大小

  1. 打开 FreeRTOS 的 configUSE_TRACE_FACILITY 配置项和一些相关的配置项
  2. 使用 void vTaskList( char * pcWriteBuffer ) 获取所有 task 的相关状态
  3. 查看 任务的 HWM,即最小剩余内存
  4. 调整比较大的 HWM 对应的 task 堆栈大小
  5. 反复测试,确定是否满足应用需求

ESP32 优化笔记(一)内存优化相关推荐

  1. Android性能优化系列之内存优化

    在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(Garbage Collection,GC)完成的,程序员不需要通过调用函数来释放内存,但也随之带来了内存泄漏的可能,上篇博客,我介 ...

  2. iOS25个性能优化,和内存优化

    1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你 ...

  3. C++性能优化笔记-13-特定优化主题

    特定优化主题 使用查找表 边界检查 使用位操作符一次检测多个值 整数乘法 整数除法 浮点除法 不要混合使用浮点和双精度 浮点数和整数的转换 浮点转换为整型 整型转换为浮点 在浮点变量乘法中使用整数操作 ...

  4. php 环境优化,[笔记] 使用 opcache 优化生产环境 PHP

    OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销. 一.php.ini配置opchche ...

  5. Cocos2dx引擎笔记——内存优化

    内存优化原理 纹理最耗应用内存, 纹理几乎会占据90%应用内存.所以尽量最小化应用的纹理内存使用,否则应用很有可能会因为低内存而崩溃. 认识瓶颈寻找方案 什么样的纹理最耗应用内存?消耗多少内存?利用苹 ...

  6. Android 系统性能优化(82)---Android性能优化:手把手带你全面实现内存优化

    Android性能优化:手把手带你全面实现内存优化 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的内存优化,希望你们会喜欢 目录 示意图 1. 定义 优化处理 应用程序的内存 ...

  7. Android面试-Android性能优化和内存优化、APP启动速度一线大厂的实战案例解析

    一.Android 内存管理机制 二.优化内存的意义 三.避免内存泄漏 四.优化内存空间 五.图片管理模块的设计与实现 六.总结 深入探索Android内存优化 第一章.重识内存优化 第二章.常见工具 ...

  8. U3D开发性能优化笔记(待增加版本.x)

    Amir Fasshihi 优化方案: 一.遇到麻烦时要调用"垃圾回收器"(Garbage Collector,无用单元收集程序,以下简称GC) 由于具有C/C++游戏编程背景,我 ...

  9. [转载]windows内存优化 没你想像那么美

    打开搜索引擎,输入"内存优化软件",你一定可以找到数百种内存优化软件.在这么多选择之中,该如何选择呢?如果告诉你:正确答案是"不选择",你会不会很吃惊? 相比W ...

  10. SQLSERVER2014的内存优化表

    SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技术来支持大规模OLTP工作负载. 就算如此, ...

最新文章

  1. python wxpython backend wxagg_[宜配屋]听图阁
  2. 二分类神经网络的特征光谱---1-2至1-9
  3. QT5知识:装饰器@pyqtSlot和槽和信号
  4. node和java性能_服务端I/O性能大比拼:Node、PHP、Java和Go(二)
  5. python学习(三)数字类型示例
  6. java 圆形按钮,如何在Java中创建圆形的JButton?
  7. 田渊栋团队新作:为什么非对比自监督学习效果好?
  8. 山东理工oj答案java_众数问题(山东理工OJ)
  9. 计算机中汉字用什么表示什么,在计算机中汉字是用几个字节表示
  10. 软件项目实施方案介绍
  11. Oracle数据库备份到本地
  12. java中的g1_G1GC 概念与性能调优
  13. 【重磅】Crust主网进入节点接入阶段
  14. 自己动手实现简易光线追踪算法
  15. VDI(Virtual Desktop Infrastructure)
  16. 寻找全排列的下一个数
  17. java sdk 1.7 for mac_java-如何使用适用于Mac的Oracle新的1.7 JDK运行Eclipse?
  18. 禁止所有搜索引擎蜘蛛的爬行收录
  19. java和工程造价_(   )不是Java的开发工具。
  20. Hanselminutes播客153-Scott的妻子Mo采访Scott Hanselman

热门文章

  1. 染色基础知识(四)——怎么染?
  2. lilo是什么意思_Lilo_英文名Lilo是什么意思
  3. 新浪微博分享错误代码列表
  4. SylixOS网卡驱动实现篇
  5. 微信与qq怎么连接到服务器,王者荣耀微信和qq可以一起玩吗 王者荣耀微信和qq互通吗说明...
  6. 开源网站访问统计系统Piwik的基本使用
  7. win10移动热点,手机无法连接或连接超时
  8. JPEG编码压缩率调整
  9. 服务器的正向代理与反向代理
  10. HTML特效代码大全