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

lvgl 9.3 style使用导致内存泄漏问题

lvgl切换界面的时候发屏内存泄漏的问题,

打开自带的内存占用显示的控件,占用的内存一直变大
使用官方自带的PC模拟器,输出内存使用情况下,确实存在内存占用越来越大的情况
串口输出时free的空间在逐渐变小

异常输出信息

memory_leak

定位

刚开始以为是创建跟销毁界面时,需要调用create跟delete这样的接口,这些接口存在,申请内存跟释放内存的操作,可能是哪里申请与释放没有对应上,导致内存泄漏
使用lv_style_t这个style样式,修改显示效果的时候,处理不当会引起内存泄漏
在对BUTTON进行,style设置的时候,需要销毁界面的时候,会将create的BUTTON删除掉,但却没有对style添加的参数进行删除,导致内存泄漏

  static lv_style_t s_focus;lv_style_init(&s_focus);lv_style_set_bg_color(&s_focus, lv_color_hex(0x00ff00));

只要调用了lv_style_set_xx_xx这样的接口,就会申请内存
这个lv_realloc可能就是一个新的内存申请操作
0e6cc2db-f8fe-4d2b-9aba-dd4fbb26289a

处理方式

需要在销毁界面的时,需要将设置的sytle变量,进行reset,来达到释放内存的效果。 否则内存就一直在被占用,而没有释放

	lv_style_reset(&s_focus);

lv_style_reset有相应的释放内存的操作
1db8a977-5a29-416a-8cf6-0bc78516420c

正常输出信息

memory_no_leak

信息输出大致DEMO代码

static void print_mem_status(void)
{lv_mem_monitor_t mon;lv_mem_monitor(&mon);printf("[MEM] free:%lu  used:%lu  max_used:%lu  frag:%d%%\n",(unsigned long)mon.free_size,(unsigned long)(mon.total_size - mon.free_size),(unsigned long)mon.max_used,mon.frag_pct);
}/* 切换界面的定时器回调 */
static void switch_cb(lv_timer_t * t)
{switch_cnt++;if(switch_cnt % 2 == 0) {view_switch(1);} else {view_switch(2);}/* 每次切换后打印一次内存状态 */print_mem_status();
}/* 初始化 demo */
void lv_demo_mem_monitor(void)
{view_switch(1);switch_timer = lv_timer_create(switch_cb, 500, NULL);/* 打印初始状态 */print_mem_status();
}

参考

lvgl中存在的内存泄漏问题

http://www.hskmm.com/?act=detail&tid=17155

相关文章:

  • 【AI领域】如何写好Prompt提示词:从新手到进阶的完整指南 - 详解
  • 11_Reactor网络模型
  • 「LNOI2022」盒
  • 【文摘随笔】从业开发工作五年后,再读短篇《孔乙己》——年少不懂孔乙己,长大已成孔乙己
  • 为什么我选择了 PSM 敏捷认证?
  • 外键
  • 菜油
  • 索引
  • 存储过程
  • 编写msyql8.0.21 数据库批量备份脚本
  • 完整教程:基础算法---【差分】
  • Android 源码中如何生成一个platform JKS 文件?
  • WPF小知识
  • 后端面试八股(go 方向)
  • ArcGIS 不重叠且无缝的拓扑检查和修改
  • 2025/9/25
  • 读书笔记:揭开索引的两个常见误区
  • 国标GB28181平台EasyGBS如何赋能路网数字化管理与应急指挥?
  • 获取用户ip所在城市
  • 【Proteus仿真】AT89C51单片机串行数据转换为并行仿真 - 实践
  • 第13章 day14-15 Webpack逆向
  • Viper远程配置踩坑记录
  • 国产智能体脂秤PCBA方案设计
  • 第15章 day18 Ast系列篇
  • 微波雷达模块在智能家居中的具体应用案例有哪些?
  • Ubuntu 桌面快捷方式创建增加记录
  • 队列
  • arm64中的内存屏障指令
  • 三分
  • 完整教程:微服务基础2-网关路由