温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

树莓派3b如何在rt-thread上移植LittlevGL

发布时间:2021-11-20 10:08:38 来源:亿速云 阅读:518 作者:小新 栏目:互联网科技

这篇文章主要介绍树莓派3b如何在rt-thread上移植LittlevGL,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

 

树莓派3b在rt-thread上移植LittlevGL


 

1.本文概述

本文主要针对树莓派3b,对rt-thread上移植lvgl进行叙述。用最简单的办法,实现rtt移植lvgl的过程。只需要加几个文件,就可以在使用最新版本的LittlevGL图形库了。

本文也可以在raspi qemu上进行测试,不用实际硬件开发板就可以学习LittlevGL的开发以及rt-thread的开发。

树莓派3b如何在rt-thread上移植LittlevGL

 

2.资源准备

硬件资源

树莓派3b+hdmi屏

或者采用树莓派的qemu进行模拟。相关文章可以关注我微信公众号,教你如何进行树莓派rtt环境搭建,以及qemu环境搭建。这里就不多进行叙述了。

软件资源

获取rtt的源代码:

https://github.com/RT-Thread/rt-thread
 

进入相关树莓派3b的bsp目录

rt-thread/bsp/raspberry-pi/raspi3-64/
 

接着获取lvgl的源代码

https://github.com/littlevgl/lvgl
   

3.上手体验

第一步:下载源代码

https://github.com/bigmagic123/lvgl
 

这里是在lvgl原版工程上fork的,只添加了几个文件,后面详细描述如何修改。

放到rt-thread/bsp/raspberry-pi/raspi3-64/applications文件夹下:

树莓派3b如何在rt-thread上移植LittlevGL

其中lv_conf.h在lvgl/lv_rtt_port文件夹目录;

第二步:rtt配置使用lvgl

在rt-thread/bsp/raspberry-pi/raspi3-64输入scons --menuconfig。或者在env工具中直接输入menuconfig。

树莓派3b如何在rt-thread上移植LittlevGL

第三步:编译

在控制台输入scons即可开始编译。

CC build/kernel/src/scheduler.o
CC build/kernel/src/signal.o
CC build/kernel/src/thread.o
CC build/kernel/src/timer.o
LINK rtthread.elf
aarch74-elf-objcopy -O binary rtthread.elf kernel8.img
aarch74-elf-size rtthread.elf
  text    data     bss     dec     hex filename
308672    3856   95872  408400   63b50 rtthread.elf
scons: done building targets.
 

将生成的kernel8.img放到树莓派3b的sd卡中,并且在串口控制台输入test_lvgl即可看到画面出来。

树莓派3b如何在rt-thread上移植LittlevGL

此时显示屏上的效果如下:

树莓派3b如何在rt-thread上移植LittlevGL

用大屏看的更加清楚

树莓派3b如何在rt-thread上移植LittlevGL

当然,如果手上没有树莓派硬件,也可以通过qemu进行体验。首先需要安装最新版本的qemu。建立如下的运行脚本即可。

if [ ! -f "sd.bin" ]; then
dd if=/dev/zero of=sd.bin bs=1024 count=65536
fi
qemu-system-aarch74 -M raspi3 -kernel kernel8.img -serial null -serial stdio -sd sd.bin -monitor pty
 

执行效果如下

树莓派3b如何在rt-thread上移植LittlevGL

 

4.rt-thread与lvgl进行无缝对接

这一步很关键,如何在尽量少的修改下进行无缝的对接,这就需要理解lvgl与rtt的驱动框架模型。

首先rtt采用的是SCons的方式进行编译,而LittlevGL却是采用makefile的方式进行。这里新增几个Sconscript脚本就可以了。

在lvgl项目的工程下面,添加如下的Sconscript脚本

# RT-Thread building script for bridge

import os
from building import *

cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)

if GetDepend('RT_USING_LVGL'):
for d in list:
path = os.path.join(cwd, d)
if os.path.isfile(os.path.join(path, 'SConscript')):
objs = objs + SConscript(os.path.join(d, 'SConscript'))

Return('objs')
 

以上的意思是寻找该目录下的子目录,去找SConscript脚本。

接着在lvgl/src也添加上述的脚本。

接着在lvgl/src子目录下的lv_corelv_drawlv_fontlv_hallv_misclv_objxlv_themes下添加下面脚本

from building import *

cwd = GetCurrentDir()
src = Glob('*.c') + Glob('*.cpp')+ Glob('*.a')

CPPPATH = [cwd, str(Dir('#'))]

group = DefineGroup('lv_hal', src, depend = [''],CPPPATH = CPPPATH)

Return('group')
 

该脚本的含义就是编译该目录下的所有文件。这样就可以使用scons编译lvgl了。

接着写对接驱动,为了不修改太多的lvgl相关的东西,我建立了一个lv_rtt_port的目录,专门对接lvgl。

树莓派3b如何在rt-thread上移植LittlevGL

其中lv_conf.h是lvgl工程下lv_conf_template.h的修改版本,主要修改屏的宽高,以及BPP。

lv_port_rtt.c是rtt的lcd驱动框架和lvgl的对接部分的实现。

sysmon.c是https://github.com/littlevgl/lv_examples的demo程序,在lv_apps目录下。

rtt_lvgl_test.c是在rtt上实现的测试lvgl的程序,开启一个gui线程。

这部分完成就可以了。

另外在rtt修改的地方只有一处,就是对接tick的驱动。

void rt_hw_timer_isr(int vector, void *parameter)
{
#ifdef BSP_USING_CORETIMER
   rt_hw_set_gtimer_val(timerStep);
#else
   ARM_TIMER_IRQCLR = 0;
#endif

#ifdef RT_USING_LVGL
   lv_tick_inc(1);
#endif

   rt_tick_increase();
}
 

这里是硬件定时器,每一个tick产生一次中断,由于目前没有用到其他的定时器,这里使用的和操作系统同一个tick。也可以用独立的tick或者软件定时器实现。

这些操作完成之后,lvgl就可以在rtt上运行了。


以上是“树莓派3b如何在rt-thread上移植LittlevGL”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI