GUI GUIDER 应用笔记

  • GUI GUIDER 是恩智浦公司基于 Little VGL 的图形界面开发工具,第一个版本于2021年5月14日推出,这也是目前最新的版本。
  • 这个几月时间,我在使用GUI GUIDER的时候遇到了一些问题,也有一些解决办法,现在分享给大家。
  • 整理的在STM32F4上运行LVGL7.10.1源码下载链接:STM32F4运行LVGL7.10.1的源码

【 0. GUI GUIDER的运行环境 】

如果是WINDOWS,还需要下载一个JAVA插件,不然会报错

【 1. GUI GUIDER 生成代码的版本 】

GUI GUIDER 兼容 LVGL 7.10.1 版本。
在这里插入图片描述

【 2. 移植问题 】

  • 我是将LVGL移植到STM32F407ZET6上进行开发的,有关移植的教程可以参考 嵌入式大杂烩 这篇文章,但是这篇文章里没有做到完全移植(部分小部件还不能用)。其只修改了lv_port_disp.c这个文件,而 lv_port_fs.c 和 lv_port_indev.c 没有修改,想要修改的同学可以参考 正点原子资料下载中心 中正点原子的LVGL移植文档。
  • 此外,想要移植外部SRAM加速那一部分的伙伴也可以参考正点原子的移植文档。

【 3. 中文显示部分代码报错 】

  • 移植成功后,如果有部分中文,可能会报错。这算是第一个BUG了。
    在这里插入图片描述
  • 解决办法就是:魔术棒里这个位置输入这行代码:
--locale=english

在这里插入图片描述

【 4. GUI GUIDER里的微调框不能使用 】

也就是图中这个东东。
在这里插入图片描述

  • 在我将其拖入界面中后,生成的代码总是报错说重复定义 h 这个标识,可是我整个工程里都没有 h 这个单独的变量…这算是第2个BUG了。
  • 所以建议大家不用这个控件。

【 5. 输入框卡死 】

  • 在用这个东东时,
    在这里插入图片描述
    当多次在屏幕中切换这个输入框时,会卡死。这…无解。

2021/10/9
经过多次测试,每次使用完输入框这个功能后,应当将其关闭,即点击键盘右下角的“√”表示结束,再退出,即可解决上述问题。
在这里插入图片描述

【 6. 生成代码的解析 】

使用 GUI GUIDER 生成的代码,层次清晰,函数接口封装性好。
例如下面的:设置了4个屏幕:Screen_Home、Screen_Test、Screen_History、Screen_Set。每个界面下都有相应的控件。
在这里插入图片描述
然后来看一下生成的代码:
在这里插入图片描述

  • events_init.c中包含所有触摸事件的初始化函数、回调函数。
  • gui_guider.c中包含了主屏幕(启动看到的第一个屏幕)的配置函数。
  • 以下这4个函数包含了各个屏幕的样式配置。
    set
  • 其他的.c文件都是有关字体、图片,不需关注。

【 7. 多次进入屏幕页面导致的卡死问题 】

-----------------------------------2021/7/20 更新-----------------------

  • 之前有学长拿 LVGL 做毕设,但是多次进入触摸屏次级页面后,会出现卡死的问题。
  • 这几天我也在拿 LVGL 做课设,时不时也会出现上述问题(有时候我当做没看见,重新复位就过去)。但是,这不是做科研的态度!
  • 于是咨询了老学长当时是怎么解决的,他说,当时出现这个问题后,放弃了LVGL,,这怎么可以?!

今天在经过不断的尝试后,终于解决了这个问题,下面分享一下我的探索历程。


首先我在KEIL中进入调试,开启全速运行,然后多次触摸屏幕进入次级页面,进而引发屏幕卡死。屏幕卡死后,我点击结束全速运行,然后程序就跳到了这一行代码中:

Out of memory,can't allocate a new buffer (increase your LV_MEM_SIZE/heap size)

内存溢出,不能分配一块新的缓冲区(增大你的LV_MEM_SIZE/堆 大小)
在这里插入图片描述
不过我这是多次点击屏幕重复加载页面后才出现的屏幕卡死问题,所以和硬件本身的内存大小无关,而是说每次进入页面,对内存的使用是累加型的,每进入一次,内存就少一点,直至报错(即经典的内存泄漏问题)。


带着这行代码,我进入百度搜索,搜不到相关解释…
于是在想是否是 task 任务的问题,因为我设置了两个全局的 task 变量,但是在注释后,并未发现明显变化。。


于是,带着疑问,进入 LVGL官方论坛 ,搜索我的报错警告,发现了这个和我相同情况的帖子Turn the whole page,帖子下的大佬是这么回应的:
在这里插入图片描述
大致意思是:你每次都重新初始化这个样式,在第一次初始化之后,应该调用lv_style_reset而不是,继续调用lv_style_init,这将导致内存泄漏。

回去查看 GUI GUIDER 生成的代码,果然!在每次进入另一个屏幕页面时,就会重新调用样式初始化函数!


对此,我尝试在第二次或以后多次进入屏幕页面时,调用 lv_style_init 这个函数,但是样式都会回归初始配置,不好看…
于是经过多次尝试后,解决了这个问题!


下面附上代码参考:

#include "lvgl/lvgl.h"
#include "gui_guider.h"
#include "events_init.h"

unsigned int buka_home=1;

void setup_scr_Screen_Home(lv_ui *ui)
{
	/*
	这里放下面注释掉的样式创建函数行。
	*/
	if(buka_home==1)
	{
		buka_home=0;
		/*
		这里放下面注释掉的样式初始化函数。
		*/
	}
	else ;
	
 	/*
 	生成的相关代码
	记住:要把这里的所有 样式创建函数行static lv_style_t xxx 和样式初始化函数lv_style_init(&xxx)  注释掉!!!
	*/


	//Init events for screen
	events_init_Screen_Home(ui);
}

【 8. 程序运行流程 】

------------------------------------------2021/01/12 更新----------------------------------
基于STM32F4 以及 GUI GUIDER 1.2.1
在这里插入图片描述

8.1 lv_ui guider_ui;

可见,lv_ui 这个类型的结构体包含了界面内所有的小部件。
所以,首先第一步就先创建了一个结构体变量。
在这里插入图片描述

8.2 setup_ui(&guider_ui);

该行代码的定义位于 gui_guider.c 文件中,是对初始屏幕的定义和加载。
在这里插入图片描述

  • LV_THEME_DEFAULT_INIT(…);
    首先第一行代码对所有的部件进行主题的默认初始化。
  • setup_scr_screen(ui);
    该行代码的定义位于 setup_scr_screen.c 文件中,是对screen屏幕下的所有部件的创建和主题的定义。
  • lv_scr_load(ui->screen);
    加载screen屏幕。

8.3 events_init(&guider_ui);

该行代码的定义位于 events.c 文件中,是对所有事件的初始化。

【 9. 图表组件不显示线上的点 】

------------------------------------------2021/01/15更新,基于LV7.10.1----------------------------------
如下,官方 V7 给的demo中的 chart 显示的是图表均是点连线。
在这里插入图片描述
实际上,很多情况下我们只需要显示个波形,线上的点是多余的。经过参考官方论坛上这个How to make the chart widget of lvgl display pure line instead of the connection between lines and points? 帖子,可以通过下行代码实现不显示图标上线上的点:

//第一个参数是 图表对象
//其余参数无需改动,即可实现此功能。
lv_obj_set_style_local_size(chart, LV_CHART_PART_SERIES, LV_STATE_DEFAULT, 0);

最后,官方论坛 yyds!

【 10. 设置主屏幕背景 】

------------------------------------------2021/02/17 修订----------------------------------

 	//Write codes screen
	ui->screen = lv_obj_create(NULL, NULL);
	// 1. 首先 增加下行代码。
	lv_obj_set_style_local_bg_color(ui->screen, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);//【设置背景颜色为黑色】
	
	// 2. 最后仅注释下部分代码即可。
//	//Write style LV_OBJ_PART_MAIN for screen
//	static lv_style_t style_screen_main;
//	lv_style_reset(&style_screen_main);

//	//Write style state: LV_STATE_DEFAULT for style_screen_main
//	lv_style_set_bg_color(&style_screen_main, LV_STATE_DEFAULT, lv_color_make(0xff, 0xff, 0xff));
//	lv_style_set_bg_opa(&style_screen_main, LV_STATE_DEFAULT, 0);
//	lv_obj_add_style(ui->screen, LV_OBJ_PART_MAIN, &style_screen_main);

-如果我们想在主屏幕用黑色背景即可选中DARK,不用另导入黑色图片做背景。可修改setup_scr_screen.c中部分代码即可:

【 11. 设置图表外框线为指定颜色 】

//第一个参数是 图表对象
//最后一个参数是 指定的颜色
//其余参数无需改动,即可实现此功能
lv_obj_set_style_local_border_color(your_chart, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);//设置图表外框颜色为黑色
  • 18
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
GUI Guider是恩智浦提供的用户友好型图形用户界面开发工具,可通过开源LVGL图形库快速开发高品质的显示。GUI Guider的拖放编辑器可以轻松利用LVGL的众多特性,如小部件、动画和样式来创建GUI,而只需少量代码或根本无需任何代码。\[2\]GUI Guider是恩智浦为LVGL开发的一个上位机GUI设计工具,可以通过拖放控件的方式设计LVGL GUI页面,加速GUI的设计,并提供C语言代码,方便嵌入到自己的项目中。\[3\]如果你想使用GUI Guider,你可以通过恩智浦官网下载软件,也可以通过百度网盘链接下载GUI Guider的最新版本。\[1\]在使用GUI Guider之前,建议先熟悉LVGL的各种组件,可以参考LVGL官方文档或百问网的中文版文档。\[2\]创建新的工程后,你就可以开始使用GUI Guider来设计和开发你的图形用户界面了。 #### 引用[.reference_title] - *1* *3* [快速入门GUI-guider](https://blog.csdn.net/mucherry/article/details/126830883)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【LVGL】学习笔记--(2)GUI Guider使用](https://blog.csdn.net/sinat_33408502/article/details/129236366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MR_Promethus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值