• 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

瑞芯微RK3506開(kāi)發(fā)板必備之LVGL應(yīng)用開(kāi)發(fā)手冊(cè),觸覺(jué)智能工業(yè)核心板廠家

04/27 17:00
305
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

LVGL是一個(gè)免費(fèi)的輕量級(jí)開(kāi)源圖形庫(kù)。具有豐富部件與高級(jí)圖形特性,支持多種輸入設(shè)備和多國(guó)語(yǔ)言,獨(dú)立于硬件之外的開(kāi)源圖形庫(kù)。LVGL的配置主要區(qū)別在于渲染后端的選擇,目前可選DRM直接送顯以及通過(guò)SDL送顯。目前RK3506平臺(tái)可支持SDL送顯。

本文基于觸覺(jué)智能RK3506星閃開(kāi)發(fā)板進(jìn)行演示,配套R(shí)K3506核心板(3核A7@1.5GHz+M0@200MHz多核異構(gòu))含稅價(jià)59元,一片也是批量?jī)r(jià)

?
?

標(biāo)準(zhǔn)飽和度

?

100對(duì)比度

?

100恢復(fù)默認(rèn)設(shè)置

配置LVGL

  • Buildroot配置

基礎(chǔ)配置保存路徑:

$sdk/buildroot/configs/rockchip_rk3506_defconfig

# Buildroot相關(guān)配置

#include "base/base.config"

#include "chips/rk3506_arm.config"

#include "fs/vfat.config"

#include "wifibt/bt.config"

#include "wifibt/wireless.config"

#include "multimedia/audio.config"

#include "wifibt/bt.config"

#include "wifibt/wireless.config"

#include "lvgl/lvgl_rkadk.config"

#include "lvgl/rk_demo.config"

#include "fs/ntfs.config"

...

  • LVGL配置

基礎(chǔ)配置保存路徑:

$sdk/buildroot/configs/rockchip/lvgl/v8

$ ls buildroot/configs/rockchip/lvgl/v8

base.config lvgl_drm.config lvgl_rkadk.config lvgl_sdl.config

LVGL DEMO

  • 源碼?錄結(jié)構(gòu)

源碼路徑:<SDK>/app/lvgl_demo/

$ tree -L 1

.

#i

├── amp_monitor

├── cJSON# cJSON源碼

├── CMakeLists.txt

├── common

├── flexbus

├── gallery

├── lv_demo# 基礎(chǔ)示例程序,運(yùn)行官方DEMO

├── lvgl8# 默認(rèn)使用lvgl8

├── lvgl9

├── motor_demo

├── rk_demo# RK顯控DEMO,包含智能家居、家電顯控、樓宇對(duì)講、系統(tǒng)設(shè)置等DEMO

├── sys# 時(shí)間戳,trace debug等

└── tools

  • rk_demo代碼說(shuō)明

源碼路徑:<SDK>/app/lvgl_demo/rk_demo

主要作為一個(gè)示例程序,演示如何將官方的DEMO運(yùn)行起來(lái)。以下說(shuō)明略過(guò)一些無(wú)關(guān)的代碼,僅挑選需要關(guān)注的代碼進(jìn)行說(shuō)明。

static void lvgl_init(void)

{

/* 一切LVGL應(yīng)用的開(kāi)始 */

lv_port_init();

...

check_scr();

}

...

int main(int argc, char **argv)

{

signal(SIGINT, sigterm_handler);

struct sched_param param;

int max_priority;

max_priority = sched_get_priority_max(SCHED_FIFO);

param.sched_priority = max_priority;

if (sched_setscheduler(0, SCHED_FIFO, &param) == -1)

{

perror("sched_setscheduler failed");

}

/* 根據(jù)配置選擇對(duì)應(yīng)的DEMO初始化,繪制對(duì)應(yīng)UI */

#if ROCKIT_EN

RK_MPI_SYS_Init();

#endif

#if WIFIBT_EN

run_wifibt_server();

#endif

lvgl_init();

app_init();

rk_demo_init();

while (!quit)

{

/* 調(diào)用LVGL任務(wù)處理函數(shù),LVGL所有的事件、繪制、送顯等都在該接口內(nèi)完成 */

lv_task_handler();

usleep(100);

}

#if ROCKIT_EN

RK_MPI_SYS_Exit();

#endif

return 0;

}

源碼編譯說(shuō)明

修改源碼后,重新編譯之前刪除之前的的lvgl_demo:

$ rm -rf <SDK>/buildroot/output/rockchip_rk3506/build/lvgl_demo/ -rf

重新編譯buildroot:

$ ./build.sh buildroot

DEMO編譯說(shuō)明

觸覺(jué)智能RK3506資料網(wǎng)盤中有提供的lvgl的demo,以下是編譯方法以及demo運(yùn)行方法。

  • 解壓

命令如下:

$ mkdir demo

$ unzip lvgl_demo.zip -d demo/

$ cd demo/lvgl_demo

  • 修改與編譯

修改交叉編譯工具鏈:

$ cat Makefile

#

# Makefile

#

#CC ?= gcc

CC = /home/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506/host/bin/arm-buildroot-linux-gnueabihf-gcc

LVGL_DIR_NAME ?= lvgl

LVGL_DIR ?= ${shell pwd}

CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -Wall -Wshadow -Wundef -Wmissing-prototypes -Wno-discarded-qualifiers -Wall -Wextra -Wno-unused-function -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-error=cpp -Wuninitialized -Wmaybe-uninitialized -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wno-error=missing-prototypes -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage=2048 -Wno-unused-value -Wno-unused-parameter -Wno-missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wpointer-arith -Wno-cast-qual -Wmissing-prototypes -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wno-discarded-qualifiers -Wformat-security -Wno-ignored-qualifiers -Wno-sign-compare

LDFLAGS ?= -lm

BIN = demo

#Collect the files to compile

MAINSRC = ./main.c

include $(LVGL_DIR)/lvgl/lvgl.mk

include $(LVGL_DIR)/lv_drivers/lv_drivers.mk

#CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c

OBJEXT ?= .o

AOBJS = $(ASRCS:.S=$(OBJEXT))

COBJS = $(CSRCS:.c=$(OBJEXT))

MAINOBJ = $(MAINSRC:.c=$(OBJEXT))

SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)

OBJS = $(AOBJS) $(COBJS)

## MAINOBJ -> OBJFILES

all: default

%.o: %.c

@$(CC) $(CFLAGS) -c $< -o $@

@echo "CC $<"

default: $(AOBJS) $(COBJS) $(MAINOBJ)

$(CC) -o $(BIN) $(MAINOBJ) $(AOBJS) $(COBJS) $(LDFLAGS)

clean:

rm -f $(BIN) $(AOBJS) $(COBJS) $(MAINOBJ)

修改DEMO,如圖所示,在main.c中將demo中顯示的分辨率設(shè)置成與屏幕分辨率對(duì)應(yīng):

編譯(注意:交叉編譯工具鏈路徑根據(jù)實(shí)際情況進(jìn)行更改。):

$ make

最后將編譯出的demo 通過(guò)adb push到開(kāi)發(fā)板上。

C:Usersindustio_mhk>adb push Z:rkrk3506rk3506_linux-250211rk3506_linux6.1apptestdemolvgl_demodemo /

Z:rkrk3506rk3506_linux-250211rk3506_linux6.1apptest...ile pushed, 0 skipped. 24.4 MB/s (1127184 bytes in 0.044s)

  • ?

root@rk3506-buildroot:/# chmod a+x /demo

root@rk3506-buildroot:/# /demo

相關(guān)推薦