【LVGL】Guider 界面分析

2024-06-15 13:28
文章标签 lvgl guider 界面 分析

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

文章目录

  • 前言
  • 架构
  • 创建 UI
  • 切换界面
    • 空间释放分析
    • 创建页面
      • 空间变化

前言

分析Gui Guider-1.7.2-GA 生成的 LVGL 界面切换,资源管理等处理

架构

所有控件存放于同一个结构体 lv_ui 内,每个页面都至少包含 screen_xxx 和 screen_xxx_del 两个成员

typedef struct
{lv_obj_t *screen_top;bool screen_top_del;lv_obj_t *screen_top_img_31;lv_obj_t *screen_ext;bool screen_ext_del;lv_obj_t *screen_ext_img_1;lv_obj_t *screen_ext_img_2;
}lv_ui;

控件变量定义

lv_ui guider_ui;

主程序初始化

    /*Initialize LittlevGL*/lv_init();/*Create a GUI-Guider app */setup_ui(&guider_ui);events_init(&guider_ui);custom_init(&guider_ui);

创建 UI

void setup_ui(lv_ui *ui)
{init_scr_del_flag(ui);setup_scr_screen_ext(ui);lv_scr_load(ui->screen_ext);
}
  • 初始化页面标志
  • 初始化第一个界面
  • 加载第一个界面

切换界面

加载新屏幕前释放屏幕内存:勾选会卡顿

// screen_top 切换到 screen_std
ui_load_scr_animation(  &guider_ui,&guider_ui.screen_std,guider_ui.screen_std_del,&guider_ui.screen_top_del,setup_scr_screen_std,LV_SCR_LOAD_ANIM_NONE,200,200,false,true);

在这里插入图片描述

void ui_load_scr_animation(lv_ui *ui, lv_obj_t ** new_scr, bool new_scr_del, bool * old_scr_del, ui_setup_scr_t setup_scr,lv_scr_load_anim_t anim_type, uint32_t time, uint32_t delay, bool is_clean, bool auto_del)

空间释放分析

底层调用 lv_obj_del(obj) 删除控件,发现控件消失 heap_sys 空间得到了释放,heap_cma 无动于衷
在这里插入图片描述

原始堆栈
在这里插入图片描述
创建页面后
在这里插入图片描述

重入
在这里插入图片描述

再重入
在这里插入图片描述

cma 空间存放图片缓存,仅第一次创建界面时变化

sys 空间存放指针信息,每次创建都会生成新的指针,每次都会减少

删除界面
在这里插入图片描述
更新缓存
在这里插入图片描述
发现 cma 空间恢复如初,sys 空间有所损失

在这里插入图片描述

创建页面

创建空白界面

	ui->screen_std = lv_obj_create(NULL);lv_obj_set_size(ui->screen_std, 800, 480);lv_obj_set_scrollbar_mode(ui->screen_std, LV_SCROLLBAR_MODE_OFF);

更新布局

	//Update current screen layout.lv_obj_update_layout(ui->screen_std);

至此屏幕并没有实际刷新画面

加载显示画面

lv_scr_load(ui->screen_top);

空间变化

在这里插入图片描述

这篇关于【LVGL】Guider 界面分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

打包体积分析和优化

webpack分析工具:webpack-bundle-analyzer 1. 通过<script src="./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.jsif(process.env.NODE_ENV==='production') {module.exports = {devtool: 'none

【Qt6.3 基础教程 17】 Qt布局管理详解:创建直观和响应式UI界面

文章目录 前言布局管理的基础为什么需要布局管理器? 盒布局:水平和垂直排列小部件示例:创建水平盒布局 栅格布局:在网格中对齐小部件示例:创建栅格布局 表单布局:为表单创建标签和字段示例:创建表单布局 调整空间和伸缩性示例:增加弹性空间 总结 前言 当您开始使用Qt设计用户界面(UI)时,理解布局管理是至关重要的。布局管理不仅关系到UI的外观,更直接影响用户交互的体验。本篇博

Java中的大数据处理与分析架构

Java中的大数据处理与分析架构 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论Java中的大数据处理与分析架构。随着大数据时代的到来,海量数据的存储、处理和分析变得至关重要。Java作为一门广泛使用的编程语言,在大数据领域有着广泛的应用。本文将介绍Java在大数据处理和分析中的关键技术和架构设计。 大数据处理与

段,页,段页,三种内存(RAM)管理机制分析

段,页,段页         是为实现虚拟内存而产生的技术。直接使用物理内存弊端:地址空间不隔离,内存使用效率低。 段 段:就是按照二进制文件的格式,在内存给进程分段(包括堆栈、数据段、代码段)。通过段寄存器中的段表来进行虚拟地址和物理地址的转换。 段实现的虚拟地址 = 段号+offset 物理地址:被分为很多个有编号的段,每个进程的虚拟地址都有段号,这样可以实现虚实地址之间的转换。其实所谓的地

mediasoup 源码分析 (八)分析PlainTransport

mediasoup 源码分析 (六)分析PlainTransport 一、接收裸RTP流二、mediasoup 中udp建立过程 tips 一、接收裸RTP流 PlainTransport 可以接收裸RTP流,也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本,具体地址为:mediasoup-demo/broadcaste

Java并发编程—阻塞队列源码分析

在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。   在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了D

线程池ThreadPoolExecutor类源码分析

Java并发编程:线程池的使用   在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:   如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。   那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?