您好,登錄后才能下訂單哦!
這篇文章主要介紹樹莓派3b如何在rt-thread上移植LittlevGL,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
本文主要針對樹莓派3b,對rt-thread上移植lvgl進行敘述。用最簡單的辦法,實現rtt移植lvgl的過程。只需要加幾個文件,就可以在使用最新版本的LittlevGL圖形庫了。
本文也可以在raspi qemu上進行測試,不用實際硬件開發板就可以學習LittlevGL的開發以及rt-thread的開發。
硬件資源:
樹莓派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
第一步:下載源代碼
https://github.com/bigmagic123/lvgl
這里是在lvgl原版工程上fork的,只添加了幾個文件,后面詳細描述如何修改。
放到rt-thread/bsp/raspberry-pi/raspi3-64/applications文件夾下:
其中lv_conf.h在lvgl/lv_rtt_port
文件夾目錄;
第二步:rtt配置使用lvgl
在rt-thread/bsp/raspberry-pi/raspi3-64輸入scons --menuconfig
。或者在env工具中直接輸入menuconfig。
第三步:編譯
在控制臺輸入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
即可看到畫面出來。
此時顯示屏上的效果如下:
用大屏看的更加清楚
當然,如果手上沒有樹莓派硬件,也可以通過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
執行效果如下
這一步很關鍵,如何在盡量少的修改下進行無縫的對接,這就需要理解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_core
、lv_draw
、lv_font
、lv_hal
、lv_misc
、lv_objx
、lv_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。
其中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”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。