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

LVGL模拟器不止能看Demo:在Ubuntu里用VSCode调试和修改官方例程的实战技巧

LVGL模拟器深度开发指南在Ubuntu与VSCode中实现高效UI调试当你在嵌入式设备上开发LVGL界面时是否经历过反复烧录、调试的漫长等待模拟器开发可以彻底改变这种低效的工作流程。本文将带你超越简单的Demo演示探索如何将LVGL模拟器打造成真正的生产力工具。1. 环境配置与项目初始化1.1 搭建开发环境基础在开始之前确保你的Ubuntu系统已经安装了必要的开发工具。不同于简单的环境搭建我们需要为深度调试做好准备sudo apt update sudo apt install -y build-essential gdb libsdl2-devVSCode的安装建议直接从官方渠道获取最新版本以获得最佳的调试体验wget -O vscode.deb https://code.visualstudio.com/sha/download?buildstableoslinux-deb-x64 sudo dpkg -i vscode.deb安装完成后不要忘记添加以下关键扩展C/C (Microsoft)CMake ToolsCodeLLDB (用于调试)1.2 获取并配置项目源码直接从GitHub克隆项目可能会遇到网络问题这里推荐使用镜像源git clone https://gitee.com/mirrors/lv_port_pc_vscode.git cd lv_port_pc_vscode git submodule update --init --recursive项目结构解析lv_port_pc_vscode/ ├── lvgl/ # LVGL核心库 ├── lv_drivers/ # 显示/输入驱动 ├── main/ # 主程序入口 └── Makefile # 构建配置提示建议锁定LVGL版本以避免兼容性问题在lvgl和lv_drivers目录中执行git checkout v8.32. 深入理解项目架构与调试配置2.1 项目架构解析LVGL模拟器项目的核心架构由三个主要部分组成应用层位于main/main.c包含示例调用和用户代码入口中间件层LVGL库本身提供所有UI组件和功能驱动层SDL2实现处理显示输出和输入事件这种分层设计使得我们可以针对不同层次进行精确调试。2.2 配置VSCode调试环境在项目根目录创建.vscode/launch.json文件{ version: 0.2.0, configurations: [ { name: Debug LVGL Simulator, type: lldb, request: launch, program: ${workspaceFolder}/build/bin/demo, args: [], cwd: ${workspaceFolder}, preLaunchTask: build } ] }同时创建.vscode/tasks.json用于构建{ version: 2.0.0, tasks: [ { label: build, type: shell, command: make clean make, group: { kind: build, isDefault: true } } ] }3. 高效开发与调试技巧3.1 动态修改示例代码在main/main.c中你会看到类似这样的示例调用lv_demo_widgets(); // 示例1 // lv_demo_music(); // 示例2调试技巧使用条件编译快速切换不同示例在示例调用前后添加日志输出使用LVGL的事件回调进行调试3.2 断点调试与变量监控在VSCode中设置断点时以下变量特别值得关注变量类型示例调试价值LVGL对象lv_obj_t* btn查看对象属性和状态样式变量lv_style_t* style分析样式继承关系事件数据lv_event_t* e理解事件传递机制调试时尝试在Watch窗口添加这些表达式lv_obj_get_state(btn)lv_obj_get_style_prop(btn, LV_STYLE_BG_COLOR)3.3 屏幕适配测试技巧修改SDL分辨率不仅是为了适配不同屏幕更是测试UI响应式设计的好方法。在main/main.c中找到#define SDL_HOR_RES 480 #define SDL_VER_RES 320创建一组常用分辨率定义方便切换#if defined(HD_MODE) #define SDL_HOR_RES 1280 #define SDL_VER_RES 720 #elif defined(WATCH_MODE) #define SDL_HOR_RES 240 #define SDL_VER_RES 240 #else // 默认模式 #define SDL_HOR_RES 480 #define SDL_VER_RES 320 #endif在Makefile中添加编译选项CFLAGS -DHD_MODE1 # 启用高清模式4. 将自定义UI集成到模拟器4.1 创建自定义组件在项目中新建src/my_ui.c文件#include lvgl/lvgl.h void my_custom_button_create(lv_obj_t* parent) { lv_obj_t* btn lv_btn_create(parent); lv_obj_set_size(btn, 100, 50); lv_obj_align(btn, LV_ALIGN_CENTER, 0, 0); lv_obj_t* label lv_label_create(btn); lv_label_set_text(label, Click Me!); lv_obj_center(label); lv_obj_add_event_cb(btn, btn_event_handler, LV_EVENT_ALL, NULL); }记得在main/main.c中包含你的头文件并调用创建函数。4.2 性能分析与优化LVGL提供了内置的性能监控工具在main.c中启用lv_disp_set_monitor_cb(disp, monitor_cb); void monitor_cb(lv_disp_drv_t * drv, uint32_t time, uint32_t px) { static uint32_t avg_time 0; static uint32_t avg_fps 0; static uint32_t count 0; avg_time time; avg_fps (1000000 / time); count; if(count 60) { printf(Avg render time: %dμs | Avg FPS: %d\n, avg_time/count, avg_fps/count); avg_time 0; avg_fps 0; count 0; } }优化建议减少不必要的重绘使用LVGL的内存池简化复杂样式4.3 自动化测试集成结合SDL的输入模拟功能可以创建自动化UI测试# 示例使用pyautogui进行简单测试 import pyautogui import time def test_button_click(): # 定位按钮位置 button_pos pyautogui.locateOnScreen(button.png) pyautogui.click(button_pos) time.sleep(0.5) assert pyautogui.locateOnScreen(clicked.png)在项目中添加简单的CMake配置即可将模拟器构建为可测试组件。

相关文章:

LVGL模拟器不止能看Demo:在Ubuntu里用VSCode调试和修改官方例程的实战技巧

LVGL模拟器深度开发指南:在Ubuntu与VSCode中实现高效UI调试 当你在嵌入式设备上开发LVGL界面时,是否经历过反复烧录、调试的漫长等待?模拟器开发可以彻底改变这种低效的工作流程。本文将带你超越简单的Demo演示,探索如何将LVGL模…...

gte-base-zh与Git版本控制的结合:模型迭代管理实践

gte-base-zh与Git版本控制的结合:模型迭代管理实践 如果你在团队里搞过模型精调,肯定遇到过这样的麻烦事:张三上周调的那个参数是什么来着?李四改的那个配置文件怎么找不到了?上周测试效果最好的那个模型权重&#xf…...

新手友好:Python3.9镜像环境配置,Jupyter和SSH两种方式任你选

新手友好:Python3.9镜像环境配置,Jupyter和SSH两种方式任你选 1. Python3.9镜像简介 Python3.9是Python语言的一个重要版本,它继承了Python一贯的简洁易读特性,同时带来了多项性能改进和新功能。这个Miniconda-Python3.9镜像为你…...

如何从零开始构建中国象棋AlphaZero AI:完整实战指南与进阶技巧

如何从零开始构建中国象棋AlphaZero AI:完整实战指南与进阶技巧 【免费下载链接】ChineseChess-AlphaZero Implement AlphaZero/AlphaGo Zero methods on Chinese chess. 项目地址: https://gitcode.com/gh_mirrors/ch/ChineseChess-AlphaZero 想要打造一个能…...

AtlasOS:终极Windows系统性能优化与隐私保护指南

AtlasOS:终极Windows系统性能优化与隐私保护指南 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atl…...

R数据可视化进阶|利用Scatterplot3d包打造交互式3D散点图

1. 为什么需要3D散点图可视化 在数据分析工作中,我们经常需要同时观察三个变量之间的关系。传统的2D散点图只能展示两个变量之间的相关性,当我们需要分析三个变量之间的复杂关系时,3D散点图就成为了必不可少的工具。比如在分析鸢尾花数据集时…...

G-Helper:让华硕笔记本性能释放的轻量级硬件控制工具

G-Helper:让华硕笔记本性能释放的轻量级硬件控制工具 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址…...

ICP算法实战:从Point-to-Plane到VGICP,5种点云配准方法性能对比(附Python代码)

ICP算法实战:从Point-to-Plane到VGICP,5种点云配准方法性能对比(附Python代码) 在三维视觉和机器人领域,点云配准是构建环境地图、实现定位导航的基础技术。当我们需要将多个视角采集的点云数据拼接成一个完整的三维模…...

通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI轻量化优势:对比传统方案在边缘计算场景下的潜力

通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI轻量化优势:对比传统方案在边缘计算场景下的潜力 最近在折腾一些边缘设备上的AI应用,发现一个挺有意思的现象:大家一提到部署大模型,脑子里蹦出来的第一个念头往往是“得找个性能强劲的服务…...

Python实战:出租车计费模拟器开发(附完整代码与测试用例)

Python实战:出租车计费模拟器开发(附完整代码与测试用例) 出租车计费系统是城市交通中不可或缺的一部分,而用Python模拟这一过程不仅能帮助初学者理解条件分支和输入输出处理,还能培养将现实问题转化为代码的思维能力。…...

如何用Video2X实现视频画质智能增强?零基础入门到精通指南

如何用Video2X实现视频画质智能增强?零基础入门到精通指南 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trend…...

CentOS7虚拟机网络配置全攻略:从ifconfig不显示ens33到FinalShell成功连接

CentOS7虚拟机网络配置全攻略:从ifconfig不显示ens33到FinalShell成功连接 刚接触Linux虚拟机的开发者或运维新手,经常会遇到一个令人头疼的问题:启动CentOS7虚拟机后,输入ifconfig命令,发现根本没有显示ens33网卡信息…...

403 Forbidden错误排查:Qwen3-0.6B-FP8 API服务部署中的常见网络与权限问题解决

403 Forbidden错误排查:Qwen3-0.6B-FP8 API服务部署中的常见网络与权限问题解决 部署好一个AI模型服务,满心欢喜地打开浏览器或调用客户端,结果屏幕上冷冰冰地弹出一个“403 Forbidden”,这种感觉就像兴冲冲去赴约,却…...

如何免费解锁网盘高速下载:网盘直链下载助手终极指南

如何免费解锁网盘高速下载:网盘直链下载助手终极指南 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 你是否曾经因为网盘下载速度慢如蜗牛而烦恼?是否在办公环境中无法…...

零门槛构建专属A股数据平台:3大优势+4步部署+5类应用场景

零门槛构建专属A股数据平台:3大优势4步部署5类应用场景 【免费下载链接】AShareData 自动化Tushare数据获取和MySQL储存 项目地址: https://gitcode.com/gh_mirrors/as/AShareData 还在为量化研究时反复下载数据而抓狂?每次回测都要等待API响应&a…...

从PLC到Kubernetes:工业Python网关高可用配置的6层安全加固体系(含CVE-2024-XXXX漏洞规避方案)

第一章:工业Python网关的演进逻辑与高可用本质工业现场设备协议繁杂、环境严苛、响应实时性要求高,传统嵌入式网关受限于固件封闭、扩展能力弱和生态割裂,难以支撑现代智能制造对数据柔性接入与边缘智能协同的需求。Python凭借其丰富的工业协…...

51单片机红外避障循迹小车实战:从接线到代码调试全流程(附避坑指南)

51单片机红外避障循迹小车实战:从硬件搭建到算法优化全解析 在电子制作领域,红外避障循迹小车堪称"入门必修课"。这个看似简单的项目,实则融合了传感器技术、电机控制、逻辑编程等多个核心知识点。不同于市面上大多数教程只停留在基…...

MiniCPM-o-4.5-nvidia-FlagOS与Claude对比分析:在复杂推理任务上的差异化表现

MiniCPM-o-4.5-nvidia-FlagOS与Claude对比分析:在复杂推理任务上的差异化表现 最近在AI圈子里,关于不同模型在复杂推理任务上的表现,讨论得挺热闹的。特别是像MiniCPM-o-4.5-nvidia-FlagOS(后面简称MiniCPM)和Claude这…...

Pyenv vs Miniconda vs Anaconda:Python环境管理工具链深度解析

1. Python环境管理工具全景概览 刚接触Python开发时,我最头疼的就是环境配置问题。同一个项目在不同电脑上跑出不同结果,安装包时各种依赖报错,这些经历让我深刻认识到环境管理工具的重要性。目前主流的Pyenv、Miniconda和Anaconda就像三种不…...

【Squoosh CLI】谷歌开源命令行图片批量压缩工具实战指南

1. 为什么你需要Squoosh CLI? 每次打开设计稿文件夹看到几十张未压缩的图片时,我都忍不住头皮发麻。作为前端开发,我经历过太多因为图片体积过大导致的页面加载缓慢问题。直到发现了谷歌开源的Squoosh CLI工具,这个命令行神器彻底…...

革命性超分辨率突破:OptiScaler让任何显卡实现4K级画质与帧率双提升

革命性超分辨率突破:OptiScaler让任何显卡实现4K级画质与帧率双提升 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 在…...

Python实战:从零掌握标准正态分布及其可视化

1. 什么是标准正态分布? 我第一次接触标准正态分布是在大学统计课上,当时教授画了一个完美的钟形曲线,说这是自然界最常见的分布。后来做数据分析才发现,这个看似简单的曲线真的无处不在——从人的身高体重到考试分数,…...

NASA、ESA官方数据源直连失败?Python遥感API调用失效诊断手册(含12个HTTPS/Token/CRS认证报错速查表)

第一章:NASA、ESA官方遥感数据直连失效的典型现象与影响评估近年来,全球多个科研机构与商业遥感平台频繁报告无法稳定访问NASA Earthdata Login和ESA Copernicus Open Access Hub的API端点,表现为HTTP 503、401或连接超时等异常响应。此类直连…...

LaTeX algorithm2e避坑指南:为什么你的\tcp*注释后面总多个分号?

LaTeX algorithm2e避坑指南:为什么你的\tcp*注释后面总多个分号? 第一次在LaTeX中用algorithm2e写算法伪代码时,很多人会被\tcp*这个看似简单的注释命令坑到——明明只是想加个注释,结果代码末尾莫名其妙多出个分号,排…...

终极指南:如何从碧蓝航线中提取Live2D角色资源

终极指南:如何从碧蓝航线中提取Live2D角色资源 【免费下载链接】AzurLaneLive2DExtract OBSOLETE - see readme / 碧蓝航线Live2D提取 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneLive2DExtract 碧蓝航线Live2D提取工具是一个专门用于从Unity游戏…...

如何在Linux内核中实现高性能exFAT文件系统读写支持?

如何在Linux内核中实现高性能exFAT文件系统读写支持? 【免费下载链接】exfat-nofuse Android ARM Linux non-fuse read/write kernel driver for exFat and VFat Android file systems 项目地址: https://gitcode.com/gh_mirrors/ex/exfat-nofuse 你是否曾经…...

传世无双光武系统全解析:蓝紫橙红金星位进阶,特效酷炫战力飙升新高度!

在传奇类手游百花齐放的今天,《金装裁决之传世无双》凭借官方正版授权的品质保障、每周稳定开新区的公平生态,以及不断创新的玩法体系,成为无数玩家心中的热血首选。而即将于2026 年 3 月 30 日 10:00震撼开启的【无双 1371 区】,…...

开源网页监控工具changedetection.io:实时追踪网页变化的全方位解决方案

开源网页监控工具changedetection.io:实时追踪网页变化的全方位解决方案 【免费下载链接】changedetection.io The best and simplest free open source website change detection, website watcher, restock monitor and notification service. Restock Monitor, c…...

LiuJuan20260223Zimage网络安全攻防演练:模拟攻击与智能防御

LiuJuan20260223Zimage网络安全攻防演练:模拟攻击与智能防御 最近在捣鼓一个挺有意思的AI工具,叫LiuJuan20260223Zimage。这名字有点长,但功能确实让人眼前一亮。它不像那些只会聊天或者画图的模型,而是专门针对网络安全这块&…...

FPGA图像处理入门:OV7670+DVP接口数据采集的那些‘坑’与优化策略

FPGA图像处理实战:OV7670DVP接口数据采集的工程级优化指南 当你在实验室调试OV7670摄像头时,是否遇到过这些场景:VGA显示器上的图像突然撕裂、颜色通道错乱,或是帧率莫名其妙降到个位数?作为一款经典的VGA分辨率CMOS传…...