GUI-Guider项目结构大揭秘

好的,让我们来看看这个GUI-Guider生成的项目到底长啥样!

项目目录结构树

TTT2/

├── custom/                     # 自定义代码目录

├── generated/                  # 自动生成的代码目录

│   ├── guider_customer_fonts/  # 自定义字体

│   ├── guider_fonts/           # GUI-Guider生成的字体

│   ├── images/                 # 图片资源

│   ├── events_init.c/h         # 事件初始化代码

│   ├── generated.mk            # 编译脚本

│   ├── gui_guider.c/h          # GUI-Guider核心代码

│   ├── setup_scr_screen.c      # 屏幕设置代码

│   └── widgets_init.c/h        # 控件初始化代码

├── import/                     # 导入资源目录

├── lib/                        # 库文件目录

├── lvgl/                       # LVGL图形库源码

├── lvgl-simulator/             # LVGL模拟器

├── ports/                      # 平台移植层

├── temp/                       # 临时文件目录

├── CMakeLists.txt              # CMake构建文件

├── LICENSE.txt                 # 许可证文件

├── SCR.txt                     # 屏幕配置文件

└── TTT2.guiguider              # GUI-Guider项目配置文件

眼花缭乱是吧,但是其实平常只用得到两个文件夹,也就是

custom/ - 自定义代码目录

generated/ - 自动生成的代码目录

generated这个文件夹里的代码都是GUI-Guider自动生成的,请勿手动修改! 每次在GUI界面上操作,生成的代码就会自动更新到这里。挑三个最重要的说:

images/ - 导入的图片资源都在这

guider_fonts/ - GUI-Guider生成的字体文件

guider_customer_fonts/ - 自定义导入的字体文件

可以看到,每用一个字号,都会单独的被自动的取模,所以做项目的时候,尽量不要用太多的不同字号的字体,因为每个字体都会把ASCII码全部都取模一遍,很占空间,当然,汉字是单独储存的,用到的才会取模。

GUI-Guider粘贴文件到VSCODE上,编译老是报错

好啦,这个其实也是老问题了,原因是,当文件目录出现变动或者文件内容出现大幅度修改的时候,vscode先前构建好的目录或者链接的数据就检测不到了,所以就会报错,当然,你可以点垃圾桶重新构建整一个文件,但是那样真的太浪费时间了,而且也没有必要,所以给出一个神奇小代码。

idf.py reconfigure

使用方法如下图

等待完成后再进行编译,就可以看到原来报错的内容或者各种奇怪的编译报错问题就解决啦!

GUI-Guider削减体积小技巧

这两个按钮强烈建议都多嗯嗯,因为有的图片用不到或者改了大小之后,并不会自动的删除旧的文件,所以,多点点,没坏处。

另外,这两个文件夹只要改动过,都十分的建议把整个项目都链接一下,用上面提过的代码。

记得给LVGL上锁

今天烧录下来几乎是最大的坑,估计用freertos任务调度之后会好一些,但是如果没用的话,直接调用lvgl函数来修改一些参数的时候,lvgl会变得非常的不稳定,经常报错,解决办法就是在修改文字信息的时候,给端口加上锁。

主要是因为LVGL 图形库本身不是线程安全的。在 ESP32 的双核处理器上,当以下情况发生时会引发冲突:

  1. LVGL 刷新任务在 Core 1 上运行,正在绘制界面
  2. 你的业务逻辑在 Core 0 或其他任务中修改 LVGL 对象(如更新文本、修改进度条等)
  3. 两者同时访问 LVGL 的内部数据结构,导致竞态条件内存访问冲突

总结

在使用 LVGL + ESP32 + FreeRTOS 时,必须遵守以下规则:

任何 LVGL API 调用都要用 lvgl_port_lock() 保护

锁内只执行快速的 LVGL 操作

及时调用 lvgl_port_unlock() 释放锁

玩几天LVGL,发现这确实是很方便的工具,记录和总结了一些小技巧,希望读到这里的人,能够有所收获。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐