溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

樹(shù)莓派3b如何在rt-thread上移植LittlevGL

發(fā)布時(shí)間:2021-11-20 10:08:38 來(lái)源:億速云 閱讀:506 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹樹(shù)莓派3b如何在rt-thread上移植LittlevGL,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

 

樹(shù)莓派3b在rt-thread上移植LittlevGL


 

1.本文概述

本文主要針對(duì)樹(shù)莓派3b,對(duì)rt-thread上移植lvgl進(jìn)行敘述。用最簡(jiǎn)單的辦法,實(shí)現(xiàn)rtt移植lvgl的過(guò)程。只需要加幾個(gè)文件,就可以在使用最新版本的LittlevGL圖形庫(kù)了。

本文也可以在raspi qemu上進(jìn)行測(cè)試,不用實(shí)際硬件開(kāi)發(fā)板就可以學(xué)習(xí)LittlevGL的開(kāi)發(fā)以及rt-thread的開(kāi)發(fā)。

樹(shù)莓派3b如何在rt-thread上移植LittlevGL

 

2.資源準(zhǔn)備

硬件資源

樹(shù)莓派3b+hdmi屏

或者采用樹(shù)莓派的qemu進(jìn)行模擬。相關(guān)文章可以關(guān)注我微信公眾號(hào),教你如何進(jìn)行樹(shù)莓派rtt環(huán)境搭建,以及qemu環(huán)境搭建。這里就不多進(jìn)行敘述了。

軟件資源

獲取rtt的源代碼:

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

進(jìn)入相關(guān)樹(shù)莓派3b的bsp目錄

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

接著獲取lvgl的源代碼

https://github.com/littlevgl/lvgl
   

3.上手體驗(yàn)

第一步:下載源代碼

https://github.com/bigmagic123/lvgl
 

這里是在lvgl原版工程上fork的,只添加了幾個(gè)文件,后面詳細(xì)描述如何修改。

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

樹(shù)莓派3b如何在rt-thread上移植LittlevGL

其中l(wèi)v_conf.h在lvgl/lv_rtt_port文件夾目錄;

第二步:rtt配置使用lvgl

在rt-thread/bsp/raspberry-pi/raspi3-64輸入scons --menuconfig?;蛘咴趀nv工具中直接輸入menuconfig。

樹(shù)莓派3b如何在rt-thread上移植LittlevGL

第三步:編譯

在控制臺(tái)輸入scons即可開(kāi)始編譯。

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放到樹(shù)莓派3b的sd卡中,并且在串口控制臺(tái)輸入test_lvgl即可看到畫(huà)面出來(lái)。

樹(shù)莓派3b如何在rt-thread上移植LittlevGL

此時(shí)顯示屏上的效果如下:

樹(shù)莓派3b如何在rt-thread上移植LittlevGL

用大屏看的更加清楚

樹(shù)莓派3b如何在rt-thread上移植LittlevGL

當(dāng)然,如果手上沒(méi)有樹(shù)莓派硬件,也可以通過(guò)qemu進(jìn)行體驗(yàn)。首先需要安裝最新版本的qemu。建立如下的運(yùn)行腳本即可。

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
 

執(zhí)行效果如下

樹(shù)莓派3b如何在rt-thread上移植LittlevGL

 

4.rt-thread與lvgl進(jìn)行無(wú)縫對(duì)接

這一步很關(guān)鍵,如何在盡量少的修改下進(jìn)行無(wú)縫的對(duì)接,這就需要理解lvgl與rtt的驅(qū)動(dòng)框架模型。

首先rtt采用的是SCons的方式進(jìn)行編譯,而LittlevGL卻是采用makefile的方式進(jìn)行。這里新增幾個(gè)Sconscript腳本就可以了。

在lvgl項(xiàng)目的工程下面,添加如下的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_core、lv_draw、lv_font、lv_hal、lv_misc、lv_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了。

接著寫(xiě)對(duì)接驅(qū)動(dòng),為了不修改太多的lvgl相關(guān)的東西,我建立了一個(gè)lv_rtt_port的目錄,專門(mén)對(duì)接lvgl。

樹(shù)莓派3b如何在rt-thread上移植LittlevGL

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

lv_port_rtt.c是rtt的lcd驅(qū)動(dòng)框架和lvgl的對(duì)接部分的實(shí)現(xiàn)。

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

rtt_lvgl_test.c是在rtt上實(shí)現(xiàn)的測(cè)試lvgl的程序,開(kāi)啟一個(gè)gui線程。

這部分完成就可以了。

另外在rtt修改的地方只有一處,就是對(duì)接tick的驅(qū)動(dòng)。

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();
}
 

這里是硬件定時(shí)器,每一個(gè)tick產(chǎn)生一次中斷,由于目前沒(méi)有用到其他的定時(shí)器,這里使用的和操作系統(tǒng)同一個(gè)tick。也可以用獨(dú)立的tick或者軟件定時(shí)器實(shí)現(xiàn)。

這些操作完成之后,lvgl就可以在rtt上運(yùn)行了。


以上是“樹(shù)莓派3b如何在rt-thread上移植LittlevGL”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI