【LVGL v8.3】切换界面时内存变化分析

2024-06-15 22:36

本文主要是介绍【LVGL v8.3】切换界面时内存变化分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 实现
  • 分析

前言

切换界面需要释放当前控件,否则控件一直存在,同时反复创建会导致内存泄漏

实现

数据结构

static struct
{lv_obj_t *screen;bool screen_del;lv_obj_t *screen_img_bg;
}ui;

创建界面

void setup_scr_ext(void)
{//Write codes screenui.screen = lv_obj_create(NULL);lv_obj_set_size(ui.screen, 800, 480);lv_obj_set_scrollbar_mode(ui.screen, LV_SCROLLBAR_MODE_OFF);//Write codes screen_img_bgui.screen_img_bg = lv_img_create(ui.screen);lv_obj_add_flag(ui.screen_img_bg, LV_OBJ_FLAG_CLICKABLE);lv_img_set_src(ui.screen_img_bg, &_02_alpha_800x480);lv_img_set_pivot(ui.screen_img_bg, 50,50);lv_img_set_angle(ui.screen_img_bg, 0);lv_obj_set_pos(ui.screen_img_bg, 0, 0);lv_obj_set_size(ui.screen_img_bg, 800, 480);lv_obj_add_flag(ui.screen_img_bg, LV_OBJ_FLAG_HIDDEN);//Write style for screen_img_bg, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT.lv_obj_set_style_img_opa(ui.screen_img_bg, 255, LV_PART_MAIN|LV_STATE_DEFAULT);//Update current screen layout.lv_obj_update_layout(ui.screen);lv_scr_load_anim(ui.screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, true);
}

删除界面

void scr_ext_del(void)
{lv_obj_clean(ui.screen);
}

清空图片缓存

lv_img_cache_invalidate_src(NULL);

分析

原始内存

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    3090744       3200712
heap_sys         524472     39788         487048

创建界面

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    5754480       836560
heap_sys         524472     56972         480800

删除界面

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    5754480       836560
heap_sys         524472     56972         484736

释放缓存

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    5754480       3200712
heap_sys         524472     56972         486860

小结:主动释放缓存才会作用于 heap_cma;heap_sys 有损耗,需要检查

这篇关于【LVGL v8.3】切换界面时内存变化分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064773

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Spring、Spring Boot、Spring Cloud 的区别与联系分析

《Spring、SpringBoot、SpringCloud的区别与联系分析》Spring、SpringBoot和SpringCloud是Java开发中常用的框架,分别针对企业级应用开发、快速开... 目录1. Spring 框架2. Spring Boot3. Spring Cloud总结1. Sprin

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景