温馨提示×

温馨提示×

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

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

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

发布时间:2021-11-20 10:08:38 阅读:539 作者:小新 栏目:互联网科技
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要介绍树莓派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.oCC build/kernel/src/signal.oCC build/kernel/src/thread.oCC build/kernel/src/timer.oLINK rtthread.elfaarch74-elf-objcopy -O binary rtthread.elf kernel8.imgaarch74-elf-size rtthread.elf   text    data     bss     dec     hex filename 308672    3856   95872  408400   63b50 rtthread.elfscons: 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" ]; thendd if=/dev/zero of=sd.bin bs=1024 count=65536fiqemu-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 bridgeimport osfrom 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”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

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

原文链接:https://my.oschina.net/u/4239621/blog/4351528

AI

开发者交流群×