丝滑的在RT-Smart用户态运行LVGL

RT-Thread Standard与Smart版本深度解析:如何选择适合你的嵌入式操作系统 本文深度解析RT-Thread Standard与Smart版本的核心差异,帮助开发者根据项目需求选择合适的嵌入式操作系统。从内核架构、内存管理到开发模式,详细对比两者的技术实现,并提供五大典型应用场景的选型指南,涵盖实时控制、HMI设备、物联网网关等场景,助力开发者做出最优决策。 阅读详情

开发流程


1、RT-Smart 环境搭建

下载 RT-Smart 用户态应用代码:

1git clone https://github.com/RT-Thread/userapps.git

进入到 userapps 目录,克隆 RT-Thread rt-smart 分支

1git clone -b rt-smart https://gitee.com/rtthread/rt-thread.git

更详细环境配置请移步到—> RT-Thread-优雅の在D1S上运行RT-Smart

「Rb君」,公众号:RTThread物联网操作系统优雅的在D1S上运行RT-Smart

2、配置工具链

在 userapps/tools 目录下运行 get_toolchain.py 的脚本,会下载对应的工具链并展开到 userapps/tools/gun_gcc 目录。后面的工具链名称可以是 arm | riscv64。

这里以手上的 D1s 为例,D1s 是 RISCV-64 架构的,所以输入下面的命令:

1python3 get_toolchain.py riscv64

在 userapps 目录下,运行 smart-env.sh 配置工具链路径,目前支持的参数可以是 arm | riscv64

1source smart-env.sh riscv64

3、获取 lvgl 主线代码

进入到 userapps 目录,新建 media 文件夹来存放 lvgl 相关的代码,克隆 lvgl 主线代码到本地

1git clone https://github.com/lvgl/lvgl.git

4、内核驱动实现

显示部分:

这部分我们可以参考 qemu-vexpress-a9 中 drv_clcd.c 的实现方法。在用户态,要是想获取并操作 lcd,驱动至少需要实现:drv_clcd_init + drv_clcd_control 两个 ops 函数。

在 drv_clcd_control 中,我们需要对以下几种 cmd 进行处理:

  • RTGRAPHIC_CTRL_RECT_UPDATE:通知更新图形设备

  • RTGRAPHIC_CTRL_GET_INFO:获取 LCD 的基本信息,包括像素像素格式,分辨率等

  • FBIOGET_FSCREENINFO:获取 FrameBuffer 设备的固定参数信息。固定参数信息使用 struct fb_fix_screeninfo 结构体来描述

  • FBIOGET_VSCREENINFO:获取 LCD 的可变参数信息,包括屏幕的像素,尺寸等信息

触摸部分:

用户态要是想获取触摸芯片的坐标,底层驱动至少需要实现 touch_ops 的:probe + init + read_point,即探测,初始化,读取触摸设备的函数。

5、用户态接口对接

用户态目录结构如下,需要在 media/lvgl/ 目录下新建名为 lv_rtt_port 、packages 等文件夹。

1lvgl
 2
 3├── lv_rtt_port
 4
 5│   ├── SConscript
 6
 7│   ├── lv_conf.h
 8
 9│   ├── lv_port_disp.c
10
11│   └── lv_port_indev.c
12
13├── packages
14
15│   ├── LVGL-latest
16
17│   ├── lv_music_demo-latest
18
19│   └── SConscript
20
21├── SConscript
22
23├── SConstruct
24
25├── pkg_config.h
  • lv_rtt_port 是移植的关键部分对接程序,包括了显示,触摸接口,主要需要我们自己编写。

  • LVGL-latest 从 https://github.com/lvgl/lvgl上获取最新代码,不需要修改。

  • lv_music_demo-latest 是 lvgl 的 音乐播放器 demo,从 https://github.com/RT-Thread-packages/lv_demo_music.git 获取最新代码,不需要修改。

  • lv_conf.h 文件由 lvgl目录中的 lvgl_conf_template.h 修改而来。配置如下,具体可以按照自己的屏幕参数修改。

1#define LV_COLOR_16_SWAP    1
 2
 3#define LV_COLOR_DEPTH      32
 4
 5#define LV_USE_PERF_MONITOR 1
 6
 7/* music player demo */
 8
 9#define LV_USE_DEMO_RTT_MUSIC       1
10
11#define LV_DEMO_RTT_MUSIC_AUTO_PLAY 1
12
13#define LV_FONT_MONTSERRAT_12       1
14
15#define LV_FONT_MONTSERRAT_16       1
16
17#define LV_COLOR_SCREEN_TRANSP      1

5.1、显示接口

核心是在 lv_rtt_port 中,而具体需要关注的文件就是 lv_port_disp.c 文件,触摸我们可以先不急着加,先将显示接口对接上。

在 RT-Thread 中,主要通过 rt_device_xxx 来操作 LCD 设备,首先通过 rt_device_find 函数查找 lcd 设备,找到设备后可以通过 device 句柄来操作 lcd 设备。

1/* LCD Device Init */
 2
 3device = rt_device_find("lcd");
 4
 5RT_ASSERT(device != RT_NULL);
 6
 7if (rt_device_open(device, RT_DEVICE_OFLAG_RDWR) != RT_EOK)
 8
 9{
10
11    rt_kprintf("open lcd devce fail\n");
12
13    return;
14
15}
16
17rt_device_control(device, RTGRAPHIC_CTRL_GET_INFO, &info);
18
19rt_device_control(device, FBIOGET_FSCREENINFO, &fb_info);

用户态只要获取到 framebuffer 就可以进行对 lcd 进行操作了。值得注意的是,在用户态我们不能直接使用 RTGRAPHIC_CTRL_GET_INFO 返回的 framebuffer 变量,而是需要使用 FBIOGET_FSCREENINFO 得到 smem_start (地址空间的起始地址),因为分配地址空间的起始地址与长度将会被填充到 fb_fix_screeninfo 结构的 smem_start 和 smem_len 的两个变量中。

于是,我们就可以通过向 smem_start 地址中填充颜色数据的方式让 lcd 显示各种颜色了。

5.2、触摸接口

触摸接口需要关注的文件是 lv_port_indev.c 文件,主要通过 rt_device_find 查找 touch 设备,找到设备后可以通过 device 句柄来操作 touch 设备。

1#define POINT_NUMBER 1
 2
 3static rt_device_t ts;
 4
 5static struct rt_touch_data *read_data;
 6
 7ts = rt_device_find("touch");
 8
 9rt_device_open(ts, RT_DEVICE_FLAG_INT_RX);
10
11read_data = (struct rt_touch_data *)rt_calloc(POINT_NUMBER, sizeof(struct rt_touch_data) * POINT_NUMBER);

获取坐标函数在调用 rt_device_read 函数后,入参 read_data 中就保存了坐标信息,然后传递给 LVGL 的 lv_indev_data_t 结构体中即可。

1static bool touchpad_is_pressed(void)
 2
 3{
 4
 5    if (POINT_NUMBER == rt_device_read(ts, 0, read_data, POINT_NUMBER))
 6
 7    {
 8
 9        if (read_data->event == RT_TOUCH_EVENT_MOVE)
10
11        {
12
13            /* swap x and y */
14
15            rt_uint16_t tmp_x = read_data->x_coordinate;
16
17            rt_uint16_t tmp_y = read_data->y_coordinate;
18
19            /* restore data */
20
21            last_x = tmp_x;
22
23            last_y = tmp_y;
24
25            return true;
26
27        }
28
29    }
30
31    return false;
32
33}
34
35static void touchpad_get_xy(rt_int16_t *x, rt_int16_t *y)
36
37{
38
39    *x = last_x;
40
41    *y = last_y;
42
43}
44
45static void touchpad_read(lv_indev_drv_t *indev, lv_indev_data_t *data)
46
47{
48
49    if (touchpad_is_pressed())
50
51    {
52
53        data->state = LV_INDEV_STATE_PRESSED;
54
55        touchpad_get_xy(&data->point.x, &data->point.y);
56
57    }
58
59    else
60
61    {
62
63        data->state = LV_INDEV_STATE_RELEASED;
64
65    }
66
67}

6、最终效果

这里以柿饼派M7为例,将编译出来的用户态可执行文件打包,使用 xfel 工具烧录到板子上的 EMMC 中。在串口终端输入可执行文件名称来启动用户态程序。

797afa51b54af145e1743f076c2cba45.png

最终效果如下,在屏幕分辨率为 480*272,RGB565 32位色深下,lvgl 在用户态中的帧率整体保持在 60fps,满足了使用需求。

918249a07784a111898e94a0f92b8a7e.png

7、获取资料

  • Rbb666/RT-Smart-UserAPP

https://github.com/Rbb666/RT-Smart-UserAPP

  • bsp/allwinner/d1s · RT-Thread/rt-thread

https://gitee.com/rtthread/rt-thread/tree/rt-smart/bsp/allwinner/d1s

有用的话记得点星星~

————————————————

版权声明:本文为RT-Thread论坛用户「Rb君」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

https://club.rt-thread.org/ask/article/e8bc90918bd055eb.html


2022RDC RT-Thread开发者大会

一年一度的 RDC RT-Thread 开发者大会正式启动报名,本届大会以 " 聚势而强,乘势而上 " 为主题,并将于 2022年12月25日在上海丽昂豪生大酒店举行。

d2aace9f9bd1aaba67dd48d979343f40.png

立即扫码报名

你可以添加微信17775983565为好友,注明:公司+姓名,拉进RT-Thread官方微信交流群!

71ac0f485d9e769c9b103b9b43a5f1c3.gif

爱我就给我点在看13b72e2684892b2342fce5dc41f4fd8b.gif

👇点击阅读原文报名

​

freertos,rt-smart与Linux三种操作系统对比 综上所述,选择操作系统取决于应用的需求和资源限制。如果需要实时性和低资源消耗,可以选择FreeRTOS或RT-Smart。如果需要更多功能和复杂性,并且有足够的硬件资源,可以考虑使用Linux。操作系统的选择应根据具体的项目要求和硬件平台来进行评估。之前有做过freertos移植到stm32和rtsmart,Linux移植到imx6ull上,但没有深入了解三者的区别,于是决定对比总结一下三者。 阅读详情

相关推荐

RTT 全志D1s RDC2022纪念版开发板开箱使用分享与折腾记录

全志D1S是由全志公司推出的,基于阿里平头哥的C906内核的全新一代应用处理器。C906兼容RISC-V架构,标配内存管理单元,可运行Linux等操作系统。C906采用5级整型流水线设计,并可选性能优异的单双精度浮点和128位矢量运算单元,适用于消费类IPC、多媒体、消费类电子等应用领域全志D1s,又名 F133,它是今年早些时候和支持 Linux 的开发板一起推出的全志D1 RISC-V 处理器的低成本版,它和D1的主要区别在于D1s内置的RAM是 64MB DDR2。是基于RT-Thread。

DOT小文哥的博客 3536

RT-Thread Smart 简介①开发工具

RT-Thread Smart 是基于 RT-Thread 操作系统上的混合操作系统,简称为 rt-smart,它把应用从内核中独立出来,形成独立的用户态应用程序,并具备独立的地址空间(32 位系统上是 4G 的独立地址空间)。RT-Thread Smart 源码位于 rt-thread 仓库 的 rt-smart 分支上。下载 rt-thread 源码后,需要切换到 rt-smart 分支上使用。

华为奋斗者精神 2902

基于i.MX6ULL与RT-Thread Smart的ART-Pi Smart开发板实战指南

嵌入式系统开发中,处理器选型与操作系统架构是决定项目成败的关键。Cortex-A7内核以其出色的功耗效率,在物联网边缘设备、人机界面等场景中展现出独特的平衡性。微内核操作系统通过将核心服务运行于用户态,实现了更高的安全性与可靠性,同时兼容POSIX标准,便于生态扩展。这种技术组合为开发者提供了稳定、可控的硬件平台与易于维护的软件基础。ART-Pi Smart开发板精准地采用了经过市场验证的i.MX6ULL处理器与RT-Thread Smart微内核系统,并集成了RW007 Wi-Fi模组与丰富外设,为快速评

weixin_26749843的博客 572

RT-Thread Smart 上手指南

RT-Thread Smart(简称rt-smart)是基于RT-Thread操作系统衍生的新分支,面向带MMU,中高端应用的芯片,例如ARM Cortex-A系列芯片,MIPS芯片,带...

FILLMOREad的博客 2万+

RT-Smart elf 动态加载技术 : elf 加载原理与流程

RT-Smart elf 动态加载技术 系列分享: elf 加载原理与流程

坚韧与专注 1517

导出库的版本_Windows下PaddleOCR在C++中的推理部署(CPU版本)CMake + VS2017

PaddleOCR是一个与OCR相关的开源项目,不仅支持超轻量级中文OCR预测模型,总模型仅8.6M(单模型支持中英文数字组合识别、竖排文本识别、长文本识别,其中检测模型DB(4.1M)+识别模型CRNN(4.5M)),而且提供多种文本检测训练算法(EAST、DB)和多种文本识别训练算法(Rosetta、CRNN、STAR-Net、RARE)。本文将教大家通过PaddleOCR(CPU版...

weixin_31304817的博客 1913

RT-Thread Smart启航新征程

RT-Thread Smart(简称rt-smart)作为RT-Thread分支(分支名称rt-smart)终于开源出来了,许可协议依然和原来的一致,采用的Apache License ...

rtthreadiotos的博客 1412

手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南

本文提供了手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南。针对国内用户网络不稳定导致自动下载失败的问题,文章核心介绍了如何从错误信息中获取下载链接,使用浏览器或下载工具完成手动下载,并通过指定本地文件路径和参数在R中成功安装。该方法同样适用于SeuratData包中的其他数据集,是单细胞分析入门的必备生存技能。

weixin_29054399的博客 183

RT-Thread Standard vs Smart:如何为你的嵌入式项目选择最适合的版本?(含实战对比)

本文深入对比了RT-Thread Standard与Smart两个版本的核心差异与适用场景。RT-Thread Standard采用经典RTOS内核,适合资源受限、对实时性要求严苛的无MMU微控制器(如Cortex-M系列)。而RT-Thread Smart引入进程与用户空间概念,依赖MMU实现内存隔离与动态加载,更适合功能复杂、需要模块化开发与故障隔离的Cortex-A等应用处理器。文章通过实战案例,为嵌入式开发者提供了清晰的选型决策指南。

ik678901234的博客 510

Python实战:5分钟搞定抖音无水印视频下载(附完整代码)

本文系统介绍了抖音无水印视频下载的多种技术方案,重点解析了抖音视频的获取逻辑与去水印原理。文章提供了从零代码的浏览器插件到可编程的Python脚本的完整实现路径,并附带了详细的代码示例,帮助用户快速构建自己的抖音视频下载工具箱。

weixin_29089057的博客 842

白盒测试逻辑覆盖之谓词覆盖、子句覆盖、三类有效字句覆盖等知识点

本篇笔记会简化书本上的概念,用容易理解的方式来说明,有些例子打字麻烦,我会直接放图片! 目录 基础知识: 谓词覆盖predicate coverage 子句覆盖 clause coverage 组合覆盖 combinatorial coverage 有效字句覆盖Active Clause Coverage 广义有效子句覆盖(General Active Clause Coverage) 相关性有效子句覆盖(Correlated Active Clause Coverage) 限制性有效

weixin_46019681的博客 2663

【百问网DongshanPI-D1S开发板体验】+ RT-Smart初体验

根据测评计划,本次在D1S开发板芯片上体验RT-Smart系统,在整个过程中也遇到了很多问题,熬了几个晚上,终于把坑铺平了,本篇文章记录整个过程,本篇文章是完成后才写的,中间可能有部分遗漏,遇到问题的可以在文章下留言,欢迎一起讨论。烧录需要使用zadig这个软件给该设备强制安装winusb驱动,需要使用xfel进行烧录,这里需要注意的是这块板子的SD卡和Bl702有冲突,需要将拨码开关调整OFF,不然永远也下不进去。在下载源码的过程中可能出现下载失败,连接不上,关闭代理服务器设置就可以了。

DOT小文哥的博客 1419

Ollama内网离线部署大模型实战:从模型文件到私有化服务

本文详细介绍了如何在内网离线环境下,利用Ollama部署私有化大模型服务。内容涵盖从获取GGUF格式模型文件、手动安装Ollama、编写核心Modelfile配置文件,到创建运行模型、性能调优及安全加固的全流程实战指南,旨在帮助企业安全、可控地构建内部AI能力。

weixin_29209805的博客 213

【RDC2022纪念板】RT-Smart D1s上手

开发板使用了全志科技的D1s芯片,全志RISC-V D1s芯片是一款基于RISC-V架构的低功耗、高性能的嵌入式处理器,该芯片主要用于智能家居、智能音箱、智能门锁、智能监控等物联网应用领域,全志RISC-V D1s芯片的主要技术特点包括:处理器:采用RISC-V架构,主频高达1.5GHz,性能强劲。显卡:集成Mali400 MP2 GPU,支持OpenGL ES 2.0/1.1、OpenVG 1.1等图形加速技术,能够提供流畅的图像处理和游戏体验。

静静流淌的柯溪的博客 2213

ISO21434 组织网络安全管理(二)

为了实现网络安全工程,该组织建立并维护网络安全治理和网络安全文化,包括网络安全意识管理、能力管理和持续改进。这涉及到指定针对本文档的目标进行独立审计的特定于组织的规则和过程。 为了支持网络安全工程,该组织实施了网络安全的管理系统,包括管理工具和应用质量管理系统。

qq_42357877的博客 1322

Central Finance 全景解析:用 SAP S/4HANA 构建跨系统的财务中台与渐进式转型路径

Central Finance 是基于 SAP S/4HANA 的一种部署与应用场景:在不打断现有异构源系统运营的前提下,把多套 SAP 与非 SAP 系统中的财务与管理会计数据实时/准实时复制到一套中心化的 SAP S/4HANA 中,作为统一的记账与分析底座,逐步把选定的财务流程(如预算控制、付款、固定资产结账等)迁入中心系统。这让企业既能快速获得统一报表与统一核算结构,又为未来的整体迁移留出了弹性路径。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 387

RT-Thread开发,LVGL介绍,LVGL文档

寞水

寞水 1345

【Unity】RPG2D龙城纷争(十九)流程与UI界面(终章)

本章为RPG2D系列的终章,在之前的章节中我们已经完成了游戏的所有基本功能,那么用流程与UI界面将其串联起来才是我们整个游戏原型完善的标志。

神码编程 916

rt smart操作系统在“正点原子-阿尔法”开发板开箱使用

1、准备 正点原子阿尔法linux开发板,SD卡,网络,USB线。由于正点原子的开发板和ART-PI-smart开发板使用的是一样的MPU,所以可以运行ART-PI-smart的程序。 下载ART-PI-smart软件:ART-Pi-smarthttps://gitee.com/rtthread/ART-Pi-smart ,下载后,参考ART-Pi Smart Docs (gitee.io)https://art-pi.gitee.io/smart-website/docs/#/u...

fhqlongteng的博客 3127

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

在基于全志D1s的芒果派麻雀上运行国产开源rt-smart系统

想必RT-Thread系统大家不陌生了,RT-Thread Smart(简称 rt-smart)是基于 RT-Thread 操作系统衍生的新分支,面向带 MMU,中高端应用的芯片,例如 ARM Cortex-A 系列芯片,MIPS 芯片,带 MMU 的 RISC-V 芯片等。rt-smart 在 RT-Thread 操作系统的基础上启用独立、完整的进程方式,同时以混合微内核模式执行。官方文档:硬件:麻雀,MQ1或MQ1W。

DOT小文哥的博客 1323

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

RT-Smart 官方 aarch64 平台 musl gcc 工具链下载

RT-Smart 官方 aarch64 平台 musl gcc 工具链下载

坚韧与专注 2981

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RT-Smart 内核启动流程

th-thread 内核启动流程,移植操作系统内核必须掌握的

欢迎私信、留言交流 1113

RT-Thread Smart 用户态开发体验

自 V5.0.0 起,rt-smart 分支已合并至 master 分支上,下载 rt-thread 源码后,无需再切换至 rt-smart 分支,但需要为 BSP 配置 Smart 内核。RT-Thread Smart 是基于 RT-Thread 操作系统上的混合操作系统,它把应用从内核中独立出来,形成独立的用户态应用程序,并具备独立的地址空间。RT-Thread Smart 在硬件平台的基础上通过 MMU、系统调用的方式把整个系统分成了内核态及用户态。进入 userapps, 配置环境变量。

ErikChan的博客 1225

D1 哪吒开发板 rt-smart 烧写与运行

D1 哪吒开发板 rt-smart 烧写与运行

坚韧与专注 1922

RT-Thread Smart Win10 64位下编译环境的搭建

RT-Thread Smart Win10 64位下编译环境的搭建

坚韧与专注 1万+

使用RT-Thread studio 把LVGL移植到RT-Thread 上

使用RT-Thread studio 移植 LVGL到RT-Thread中 其实RT-Thread 移植LVGL 官方已经出来很多教程,但是但是他出的教程都是基于一些他们适配的BSP,但是其他不适配的怎么办呢? 当然是手搓了。 前期准备 1 在本次移植前,你必须要有在RT-Thread studio中你屏幕的显示和触摸驱动。 这个简单拉,直接把正点原子的代码移植一下就好拉。 2.你最好还是先在裸机上移植一次,这个可以跟着正点原子litleVGL(LVGL旧版本名称 要 用 这个搜索视频才能搜索的到

qq_53341141的博客 1万+
上一篇: 优雅的在D1S上运行RT-Smart
下一篇: 【RT-Thread Studio更新】英飞凌 PSOC62-IFX-PROTO-KIT 开发环境搭建指南
RT-Thread物联网操作系统
博客等级 码龄6年 2万+粉丝 392原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值