【XR806开发板试用】在 xr806 上移植 LVGL

news2025/2/26 5:45:58

本文参与极术社区的《基于安谋科技STAR-MC1的XR806开发板试用》活动。

不多废话,直接开搞,先上效果图
在这里插入图片描述

准备

开发环境啥的,已经有很多文章了,这里就不再提搭建开发环境的相关内容了。

  • 一个屏幕(1.8’ 128x160)
    在这里插入图片描述

  • LVGL源码(v8.0.2)
    (链接: https://github.com/lvgl/lvgl)

开搞

新建工程

在ohosdome目录下新建一个工程"SPI_LCD",然后在工程文件加中添加"inc",“src"文件夹和"BUILD.gn"文件,接着在src目录下创建"main.c"和"lcd.c”,在inc目录下创建lcd.h,并将lvgl8.0.2源码也下载到工程目录下,如下图:
在这里插入图片描述

lcd.c 和 lcd.h

这两个文件是lcd屏幕的驱动文件,里面包含了lcd的驱动程序,这里主要看一下用于移植LVGL的刷屏函数lcd_flush:

void lcd_flush(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t *color_p)
{
    uint16_t w = x2 - x1 + 1;
    uint16_t h = y2 - y1 + 1;
    uint32_t draw_size = w * h;

    lcd_set_address(x1, y1, x2-1, y2-1);
    for (uint32_t i=0; i<draw_size; i++)
    {
        lcd_write_dat_16(color_p[i]);
    }
}

移植LVGL

1、添加源文件

将lvgl目录下(包括子目录)所有".c"文件的相对路径添加到"BUILD.gn"文件中,以加入编译,如下图所示(展示部分):
在这里插入图片描述

2、添加头文件路径

一样修改"BUILD.gn"文件,如下图所示(对于移植LVGL,主要是红框中的):
在这里插入图片描述

3、LVGL配置文件

复制./lvgl/lv_conf_template.h为./lvgl/lv_conf.h,并作相应修改,主要修改如下:

#define LV_COLOR_DEPTH                  16
#define LV_TICK_CUSTOM_INCLUDE          "kernel/os/os_time.h"
#define LV_TICK_CUSTOM_SYS_TIME_EXPR    (OS_GetTicks())

4、lvgl显示设备注册

复制./lvgl/examples/porting/lv_port_disp_template.c为./lvgl/examples/porting/lv_port_disp.c,并作相应修改,主要修改如下:

1、启用条件编译

在这里插入图片描述

2、添加LCD驱动头文件

在这里插入图片描述

3、创建LVGL显示缓存

红框中的值可以适当做相应调整
在这里插入图片描述

4、设置LVGL显示设备的参数

主要设置屏幕的宽度与高度
在这里插入图片描述

5、添加初始化LCD屏幕代码

在这里插入图片描述

6、添加LVGL的LCD刷屏函数

在这里插入图片描述

5、LVGL初始化

在应用程序的一开始,初始化LVGL和LVGL的显示设备,首先要导入LVGL的头文件:
在这里插入图片描述

6、定时调用LVGL任务处理器

创建一个任务来执行LVGL任务处理器
这里可以适当的在while(1)中加一个LOS_Msleep(1) 感谢群友.ACE彭洪权的反馈
在这里插入图片描述

测试

至此LVGL就移植完毕了,接下来编译测试代码
在这里插入图片描述

上面代码就是使用LVGL提供的标签控件在屏幕上显示"Hello, XR806!",就如开篇的第一张图片。

总结

以上就是将LVGL移植到XR806上运行的整个流程,个人感觉XR806的编程体验还是挺好的,提供了各种外设的丰富驱动,可以方便开发者快速使用XR806实现功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1585428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ros 自定义package:在rviz中创建可显示markers的工具包(python)

在rviz中创建可显示markers的工具包 1. 创建using_makers工具包2. rviz部署和测试 1. 创建using_makers工具包 在catkin_ws工作空间下 cd ~/catkin_ws/srccatkin_create_pkg using_markers rospy visualization_msgsmkdir ~/catkin_ws/src/using_markers/scripts/添加basic_s…

D1084 5A低压差电压调整器应用方案,内含电流限制和热保护功能,防止任何过载时产生过高的结温

1、 概述&#xff1a; D1084是一款具有5A输出能力、低压差为1.5V的三端稳压器。输出电压可通过电位器调节或1.5V, 1.8V, 3.3V三个固定电压版。内含电流限制和热保护功能&#xff0c;防止任何过载时产生过高的结温。D1084系列电路有标准TO-220、TO-263和TO-252封装形式。 2、 典…

大话设计模式——21.中介者模式(Mediator Pattern)

简介 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互 UML图 应用场景 大量的连接使得一个对象不可能在没有其他对象的支持下工作&#xff0c;系统表现为一个不可分割的…

redis过期监听机制

转自&#xff1a;https://www.cnblogs.com/wangyunhong/articles/16505079.html 1.redis配置 1.打开conf/redis.conf 文件&#xff0c;取消注释&#xff1a;notify-keyspace-events Ex 2.重启redis 3.如果设置了密码需要重置密码&#xff1a;config set requirepass **** 3…

新鲜出炉!这一套二手平台管理系统,太牛了,直接领取【带源码】

​今天给大家分享一套基于SpringbootVue的二手平台管理系统源码&#xff0c;在实际项目中可以直接复用。(免费提供&#xff0c;文末自取) 一、系统运行图&#xff08;设计报告和接口文档&#xff09; 1、登陆页面 2、后台页面 3、设计报告包含接口文档 二、系统搭建视频教程 …

JVM常用参数一

jvm启动参数 JVM&#xff08;Java虚拟机&#xff09;的启动参数是在启动JVM时可以设置的一些命令行参数。这些参数用于指定JVM的运行环境、内存分配、垃圾回收器以及其他选项。以下是一些常见的JVM启动参数&#xff1a; -Xms&#xff1a;设置JVM的初始堆大小。 -Xmx&#xff1…

了解CSS中的BFC以及用法

目录 一 常见的定位方案 1. 普通流&#xff08;所有元素默认为普通流的定位&#xff09; 2. 浮动 3. 绝对定位 二 BFC 1. 定义 2. 触发条件 3. 作用 &#xff08;1&#xff09; 避免外边距重叠 ​&#xff08;2&#xff09;清除浮动 &#xff08;3&#xff09; 阻…

【知识扫盲】DHCP Server扫盲与作用

DHCP Server在实际应用中非常广泛&#xff0c;它适用于各种规模的网络环境&#xff0c;从小型办公室到大型企业网络&#xff0c;都能发挥重要作用。以下是一些具体的使用场景&#xff0c;用通俗易懂的语言进行解释。 1. 办公室网络环境 在一家公司的办公室里&#xff0c;通常会…

麒麟KOS删除鼠标右键新建菜单里不需要的选项

原文链接&#xff1a;麒麟KOS删除鼠标右键新建菜单里不需要的选项 Hello&#xff0c;大家好啊&#xff01;在日常使用麒麟KOS操作系统时&#xff0c;我们可能会发现鼠标右键新建菜单里包含了一些不常用或者不需要的选项。这不仅影响我们的使用效率&#xff0c;也让菜单显得杂乱…

基于MPC的自动驾驶泊车控制

基于MPC的自动驾驶泊车控制 H. Ye, H. Jiang, S. Ma, B. Tang, and L. Wahab, “Linear model predictive control of automatic parking path tracking with soft constraints,” International Journal of Advanced Robotic Systems, vol. 16, no. 3, p. 附赠自动驾驶学习资…

Qt之QSS样式表

QSS简介 QSS&#xff08;Qt Style Sheet&#xff09;样式表是一种用于描述图形用户界面&#xff08;GUI&#xff09;样式的语言。它允许开发者为应用程序的控件定义视觉外观&#xff0c;例如颜色、字体、尺寸和布局等。 QSS 样式表的主要目的是提供一种简洁而灵活的方式来美化…

NzN的数据结构--栈的实现

在前面我们已经学习了哪些线性数据结构呢&#xff1f;大家一起来回顾一下&#xff1a;C语言学过的数组&#xff0c;数据结构中的线性表和顺序表和链表。那我们今天再来介绍数据结构里的两个线性结构--栈和队列。 目录 一、栈的概念及结构 二、用数组实现栈 1. 栈的初始化和…

Linux内核中常用的C语言技巧

Linux内核采用的是GCC编译器&#xff0c;GCC编译器除了支持ANSI C&#xff0c;还支持GNU C。在Linux内核中&#xff0c;许多地方都使用了GNU C语言的扩展特性&#xff0c;如typeof、__attribute__、__aligned、__builtin_等&#xff0c;这些都是GNU C语言的特性。 typeof 下面…

Web 前端性能优化之七:数据存储与缓存技术

7、数据存储 在开发Web应用的过程中&#xff0c;会涉及一些数据的存储需求&#xff0c;常见的存储方式可能有&#xff1a; 保存登录态的Cookie&#xff1b; 使用浏览器本地存储进行保存的Local Storage和Session Storage&#xff1b; 客户端数据持久化存储方案涉及的Web SQ…

Redis Cluster集群模式

目录 一、理论 1.1 概念 1.2 集群的作用 1.3 redis集群的数据分片 1.4 Redis集群的主从复制模型 二、实践 2.1 Redis集群模式的搭建 2.1.1 cluster集群前期工作 2.1.2 开启群集功能 2.1.3 启动redis节点 2.1.4 启动集群 2.2 测试集群 总结 一、理论 1.1 概念 集群&a…

pyside6的QSpinBox自定义特性初步研究(二)

当前的需求是&#xff0c;蓝色背景的画面&#xff0c;需要一个相对应色系的QSpinBox部件。已有的部件风格是这样的&#xff0c;需要新的部件与之般配。 首先新建一个QDoubleSpinBox&#xff0c;并定义其背景色和边框&#xff1a; QDoubleSpinBox { color: white; border:1px…

光学雨量计红外雨量传感器应用于小型气象站

光学雨量计红外雨量传感器应用于小型气象站 随着气候变化对人类生活和农业生产的影响越来越大&#xff0c;气象观测设备的需求也逐渐增加。其中一种常见的气象观测设备是雨量计&#xff0c;用于监测降水量。在小型气象站中&#xff0c;光学雨量计红外雨量传感器被广泛应用。 …

数据库知识点汇总(最全!,2024年最新大佬分享开发经验

十九、删除数据 DELETE 语句 使用 DELETE 语句从表中删除数据。 DELETE FROM table [WHERE condition]; 删除数据 使用 WHERE 子句删除指定的记录 DELETE FROM departments WHERE department_name ‘Finance’; 如果省略 WHERE 子句&#xff0c;则表中的全部数据将被删除 DELE…

ai智能问答免费API接口

智能对话API接口&#xff0c;可以为网站或其他产品提供强大的智能交互功能&#xff0c;无需自行开发复杂的语义分析和自然语言处理算法。这使得开发者能够更专注于产品的核心功能和用户体验&#xff0c;加速产品上线速度并降低开发成本。 智能对话API接口的功能还包括对话内容…