中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

樹莓派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

东源县| 玉门市| 星子县| 西安市| 昌图县| 克拉玛依市| 荔波县| 闽侯县| 东平县| 改则县| 宁国市| 徐水县| 师宗县| 大连市| 册亨县| 任丘市| 泗水县| 巴中市| 漾濞| 海门市| 嘉鱼县| 宁强县| 沧源| 鄂托克旗| 孝昌县| 浏阳市| 南丹县| 石泉县| 阳城县| 井陉县| 保德县| 新干县| 兴业县| 射阳县| 体育| 四平市| 安吉县| 苍梧县| 邵东县| 云阳县| 万载县|