基于VSCode和MinGW-w64搭建LVGL模拟开发环境
目录
概述
1 运行环境
1.1 版本信息
1.2 软件安装
1.2.1 下载安装VS Code
1.2.1.1 下载软件
1.2.1.1 安装软件
1.2.2 下载安装MinGW-w64
1.2.2.1 下载软件
1.2.2.2 安装软件
1.2.3 下载安装SDL
1.2.3.1 下载软件
1.2.3.2 安装软件
1.2.4 下载安装CMake
1.2.4.1 CMake工具介绍
1.2.4.2 下载CMake
1.2.4.3 下载CMake
2 LVGL 软件包
2.1 lvgl 下载
2.2.1 lvgl的官方模拟器Proj
2.2.2 LVGL driver
2.2.3 lvgl源代码
2.2 lvgl软件包配置
3 VsCode中的配置
3.1 配置CMake参数
3.2 其他配置
3.2.1 准备SDL2.dll
3.2.2 check运行环境
4 测试
4.1 修改屏幕参数
4.2 测试案例
4.2.1 案例一: lv_demo_widgets
4.2.2 案例二: lv_demo_stress
概述
本文主要介绍使用VSCode和MinGW-w64搭建LVGL模拟开发环境,在使用LVGL进行项目UI设计时,通过编写代码,然后下载到板卡上运行,以查看其运行结果。这种方式虽然能正确反应UI在嵌入式设备上的运行状态,但对于开发过程来说很耗费时间。通过模拟器的形式开发UI能极大的节约时间。
1 运行环境
1.1 版本信息
| 软件信息 | 版本信息 |
|---|---|
| VS Code | V1.74.2 |
| MinGW-w64 | MinGW-W64 GCC-8.1.0 |
| Simple Directmedia Layer(SDL) | V2.30.3 |
| CMake | 3.30.0-rc2 |
| LVGL | V8.3.0 |
1.2 软件安装
1.2.1 下载安装VS Code
1.2.1.1 下载软件
登录VS Code网站,选择相应的版本下载软件,链接地址如下:
https://code.visualstudio.com/

1.2.1.1 安装软件
下载完成后,按照常规软件安装方法,安装该软件即可。安装完成后,需要配置如下3个插件,使其支持C/C++功能。

1.2.2 下载安装MinGW-w64
mingw-w64项目是一个完整的运行时环境,用于gcc支持Windows 64位和32位操作系统的本机二进制文件。
特性
1)编译器工具链本地托管
2)支持本地TLS回调
3)支持宽字符启动(-municode)
4)支持32位和64位Windows i386/x64
5)支持Multilib工具链
6)支持先进的gcc/binutils
1.2.2.1 下载软件
登录官方网址,选择相应的版本下载软件:
https://sourceforge.net/projects/mingw-w64/files/mingw-w64/

在该页面的下载栏,选择如下软件:

1.2.2.2 安装软件
1)解压软件
下载完成后,得到软件包如下:x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z

其包含如下内容:

直接解压该软件包,笔者建议不要更改目录名称:

2)配置环境路径
解压完成在windows 环境变量中配置其工作路径

3)验证
打开Windows PowerShell工具,输入命令,如果路径配置成功会看见如下信息:
gcc -v

1.2.3 下载安装SDL
Simple DirectMedia Layer是一个跨平台开发库,旨在提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问。视频播放软件、模拟器和流行游戏(包括Valve的获奖目录和许多Humble Bundle游戏)都使用了它。
1.2.3.1 下载软件
登录官方网址,选择相应的版本下载软件,笔者建议选择最新的v2.30.3
https://github.com/libsdl-org/SDL/tags

下载选项如下:
1.2.3.2 安装软件
下载完成后,得到软件包:

其内容如下:

将如下两个目录复制到mingw64的根目录中
SDL2-2.30.1目录中需要复制到mingw64目录中的文件夹:
1)x86_64-w64-mingw32
2)cmake

1.2.4 下载安装CMake
1.2.4.1 CMake工具介绍
1)单一源代码构建在多个平台上
CMake允许开发人员描述如何用一组输入文件构建简单和非常复杂的软件系统。这可以用于在多个平台上构建软件,从Android到iOS再到高性能计算系统。2)准确的依赖关系和最小的重建
CMake具有精确的依赖关系,并且只允许对已更改的代码进行最小程度的重建。它还支持Fortran和c++模块。3)Out-of-source构建
CMake允许源外构建,并提供每个源树拥有多个构建树的能力。4)Target-centric方法
现代CMake允许将构建指定为一组目标(可执行文件,库,自定义命令)。每个目标定义了它直接依赖的其他目标。然后,CMake以正确的顺序执行构建,并包含可传递的链接目标。5)使用允许捕获构建环境的缓存进行系统自省
每个CMake构建树都包含一个缓存文件,其中包含作为该构建的一部分设置的变量。这包括通过系统自省找到的所有内容、安装软件的路径和用于构建的标志。Cmake包含几个gui来允许编辑这个缓存文件。6)多个目标构建系统
CMake支持多种目标构建系统,包括Visual Studio、Xcode、ninja、make和VSCode。它允许项目充分利用其最重要的资源——开发人员。由于CMake支持许多流行的c++ IDE系统以及命令行构建工具,开发人员可以选择他们最高效的构建工具。7)跨平台打包系统
CMake包含CPack系统,它允许创建Linux、Windows和Mac的跨平台安装程序。8)全跨平台安装系统
CMake包含一个完整的跨平台安装系统。使用同一组命令可以在Linux、Windows和Mac上安装软件包。9)跨平台测试系统
CMake包括一个完整的跨平台测试系统。测试可以在项目的CMake源代码中指定,并在构建完成后运行。然后使用CTest来运行测试。结果可以发送到CDash,并且它们可以并行运行。10)自定义命令
除了构建标准库和可执行文件外,CMake还允许在构建时运行任意命令。这允许代码生成工具的跨平台集成。11)配置头文件
CMake允许项目为构建配置头文件。12)导出/导入目标器
CMake可以从构建中导出和导入目标,以允许软件被重用。13)集成调试器
CMake实现了调试适配器协议,以使用第三方工具交互调试项目的CMake代码。
1.2.4.2 下载CMake
登录官网下载软件
https://cmake.org/download/

选择如下版本,下载该软件

1.2.4.3 下载CMake
下载完成后,安装该软件,安装完成后,会在环境变量中看见其工作路径

2 LVGL 软件包
2.1 lvgl 下载
2.2.1 lvgl的官方模拟器Proj
登录github,下载该软件包:
https://github.com/lvgl/lv_port_pc_eclipse/tree/release/v8.3
选择下载版本

2.2.2 LVGL driver
登录github,下载该软件包:
https://github.com/lvgl/lv_drivers/releases/tag/v8.3.0
选择下载版本

2.2.3 lvgl源代码
登录github,下载该软件包:
https://github.com/lvgl/lvgl/tree/release/v8.3
选择下载版本

2.2 lvgl软件包配置
下载完成lvgl相关的软件包后,得到如下3个安装包,现在需要费别解压这3个软件包

1)解压:lv_port_pc_eclipse-release-v8.3.zip
直接解压该软件包,建议不需要更改任何目录名称

2)解压:lv_drivers-release-v8.3.zip 至 lv_port_pc_eclipse-release-v8.3

3)解压:lvgl-release-v8.3.zip 至 lv_port_pc_eclipse-release-v8.3

3 VsCode中的配置
3.1 配置CMake参数
1)使用vscode打开lv_port_pc_eclipse-release-v8.3工作空间

2)配置CMakeLists.txt
在该文件中配置如下代码:
file(COPY SDL2.dll DESTINATION ../bin)

3.2 其他配置
3.2.1 准备SDL2.dll
将D:\tools\mingw64\x86_64-w64-mingw32\bin目录下的SDL2.dll 复制到 lv_port_pc_eclipse-release-v8.3 工作空间中

3.2.2 check运行环境
查看运行环境,重点查看编译器编信息

4 测试
4.1 修改屏幕参数
为了方便观察屏幕显示信息,建议调整屏幕大小,在lv_port_pc_eclipse-release-v8.3\lv_drv_conf.h 文件中可以更该参数

4.2 测试案例
4.2.1 案例一: lv_demo_widgets
调试代码信息:

运行代码后,可以看见如下UI

4.2.2 案例二: lv_demo_stress
调试代码信息:

运行代码后,可以看见如下UI

相关文章:
基于VSCode和MinGW-w64搭建LVGL模拟开发环境
目录 概述 1 运行环境 1.1 版本信息 1.2 软件安装 1.2.1 下载安装VS Code 1.2.1.1 下载软件 1.2.1.1 安装软件 1.2.2 下载安装MinGW-w64 1.2.2.1 下载软件 1.2.2.2 安装软件 1.2.3 下载安装SDL 1.2.3.1 下载软件 1.2.3.2 安装软件 1.2.4 下载安装CMake 1.2.4.…...
H5112B 降压恒流芯片12V24V36V48V60V72V100V 1.2ALED 调光无频闪光滑细腻
H5112B多功能LED恒流驱动器是一款具有良好性能与高度集成度的驱动芯片。以下是该产品的主要优点及应用领域的详细分析: 产品优点: 宽电压输入范围:H5112B支持5V至90V的宽电压输入范围,使其能够适应多种不同的电源环境࿰…...
真心建议大家冲一冲新兴领域,工资高前景好【大模型NLP开发篇】
前言 从ChatGPT到新近的GPT-4,GPT模型的发展表明,AI正在向着“类⼈化”⽅向迅速发展。 GPT-4具备深度阅读和识图能⼒,能够出⾊地通过专业考试并完成复杂指令,向⼈类引以为傲的“创造⼒”发起挑战。 现有的就业结构即将发⽣重⼤变…...
深度剖析淘宝扭蛋机源码:打造趣味性电商活动的秘诀
在当今电商市场中,如何吸引用户的注意力、提升用户的参与度成为了各大电商平台竞相追求的目标。淘宝扭蛋机作为一种新型的电商活动形式,以其趣味性和互动性深受用户喜爱。本文将深度剖析淘宝扭蛋机源码,探讨其如何打造趣味性与互动性并存的电…...
vue3+优化vue-baidu-map中marker点过多导致的页面卡顿问题
场景: 移动端h5中,当我们需要在地图中展示很多marker点坐标的时候,通常会使用 bm-marker ,去循环生成marker点,在数量不多的情况下是没问题的,但是随着数据量的增加,地图就会变得卡顿,以及渲染延…...
PMS助力制造企业高效运营︱PMO大会
全国PMO专业人士年度盛会 北京易贝恩项目管理科技有限公司副总经理朱洪泽女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“PMS助力制造企业高效运营”。大会将于6月29-30日在北京举办,敬请关注! 议题简要: …...
认识一些分布-关于极值点分布的一些知识
可以参考下面资料: Extreme Value Distribution & the Extreme Value Theory - Statistics How To...
Anaconda环境安装失败的解决方案
链接步骤的补充。 为了运行marlib,需要一个全新的Anaconda环境。但是,不想把文件安装在C盘,会造成空间不足。于是试着在.condarc文件里面改动了路径,具体如图。 上图中,在defaults前面添加了D盘的路径作为安装路径。 …...
mac 本地启动rocketmq
Mac 本地起rocketmq 官网下载:RocketMq官网下载地址 下载后解压 如果电脑配置不高或者不希望rocketmq占用太大内存的,修改配置/bin/runbroker.sh JAVA_OPT"${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"-Xmx4g 初始堆大小 4g -Xms4g 最大…...
数据资产管理的未来趋势:洞察技术前沿,探讨数据资产管理在云计算、大数据、区块链等新技术下的发展趋势
一、引言 随着信息技术的飞速发展,数据已成为企业最重要的资产之一。数据资产管理作为企业核心竞争力的关键组成部分,其发展趋势和技术创新受到了广泛关注。特别是在云计算、大数据、区块链等新技术不断涌现的背景下,数据资产管理面临着前所…...
lwip中server和client的socket、地址和端口号
1、server的socket通过lwip_socket建立: server_sd lwip_socket(AF_INET, SOCK_STREAM, 0);2、client的socket在监听到连接后建立: client_sd lwip_accept(server_sd, (struct sockaddr *)&client_addr_port, (socklen_t *)&size);3、server…...
代码随想录算法训练营Day38|动态规划理论基础、2.斐波那契数、3.爬楼梯、4.使用最小花费爬楼梯
动态规划理论基础 代码随想录 (programmercarl.com) 动态规划(Dynamic Programming,简称DP)是一种算法设计技术,它通过将复杂问题分解为更小的子问题来解决优化问题。动态规划通常用于解决那些具有重叠子问题和最优子结构特性的…...
IIC通信总线
文章目录 1. IIC总线协议1. IIC简介2. IIC时序1. 数据有效性2. 起始信号和终止信号3. 数据格式4. 应答和非应答信号5. 时钟同步6. 写数据和读数据 2. AT24C023. AT24C02读写时序4. AT24C02配置步骤5. 代码部分1. IIC基本信号2. AT24C02驱动代码3. 实验结果分析 1. IIC总线协议 …...
2024 年最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
OpenAi 环境安装 首先确保您的计算机上已经安装了 Python。您可以从 Python 官方网站下载并安装最新版本 Python。安装时,请确保勾选 “Add Python to PATH” (添加环境变量)选项,以便在 cmd 命令行中直接使用 Python。 安装 Op…...
git原理解释,windows 10 / ubuntu 24.04 安装使用 github
git的原理 git是赫赫有名的Linux之父Linus Torvalds从2005年起开发的文件版本管理系统,掌控Linux内核这样一个最为重量级的世界产品的Linus为什么要开发这个东西呢?因为Linux系统由全世界的程序员协作维护,对源代码文件的版本控制管理的需求…...
requests post json/data;requests response 接收不同数据
1、requests post json/data 在Python的requests库中,当你发送POST请求时,可以选择使用json参数或data参数来传递数据。这两者之间的主要区别在于它们如何被序列化和发送到服务器。 json参数: 当你使用json参数时,requests库会自…...
【qt】平面CAD(计算机辅助设计 )项目 上
CAD 一.前言二.界面设计三.提升类四.接受槽函数五.实现图形action1.矩形2.椭圆3.圆形4.三角形5.梯形6.直线7.文本 六.总结 一.前言 用我们上节课刚刚学过的GraphicsView架构来绘制一个可以交互的CAD项目! 效果图: 二.界面设计 添加2个工具栏 需要蔬菜的dd我! 添加action: …...
C++中bool类型的使用细节
C中bool类型的使用细节 ANSIISO C标准添加了一种名叫bool的新类型(对 C来说是新的)。它的名称来源于英国数学家 George Boole,是他开发了逻辑律的数学表示法。在计算中,布尔变量的值可以是true或false。过去,C和C一样,也没有布尔…...
Java 面向对象 -- Java 语言的封装、继承、多态、内部类和 Object 类
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 007 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...
【C++】和【预训练模型】实现【机器学习】【图像分类】的终极指南
目录 💗1. 准备工作和环境配置💕 💖安装OpenCV💕 💖安装Dlib💕 下载并编译TensorFlow C API💕 💗2. 下载和配置预训练模型💕 💖2.1 下载预训练的ResNet…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
使用python进行图像处理—图像滤波(5)
图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值,以达到平滑(去噪)、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算,…...
