IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> LittlevGL在AliOS thing上的应用 -> 正文阅读

[嵌入式]LittlevGL在AliOS thing上的应用

前言

LittevGL是可以和emWIN想媲美的图形库,但是它是开源免费的,优秀又不要钱,非常良心。

LittevGL的特点就不赘述了,LittlevGL已经成为了开源RTOS(实时操作系统)RT-Thread的GUI软件包之一,甚至可以支持Linux Frame Buff。NXP 针对LittevGL开发了组态软件GUI Guider

目前仅支持NXP MCU,但是你可以把生成的代码,移植到自己的平台。

需要的资源

LittevGL官网:点击进入链接

LittevGL文档:点击进入链接

LittevGL源码:GitHub 链接?https://github.com/lvgl/lvgl? 记得一定要加 --recursive

git clone --recursive https://github.com/lvgl/lvgl

使用的工具

编码工具:VS Code

硬件平台:某国产平台

LittevGL目录结构

这里以 lvgl 7 版本为例,目前最新的已更新到 8.0以上,目录结构和api均有调整;

? ? ? ? 蓝色圈 porting 里面是示例,默认注释掉的

? ? ? ? 红色圈 src 里面是核心源码文件夹名称对应其功能,很好理解

? ? ? ? 绿色圈 几个头文件 lvgl.h是公用的引用文件,lv_conf_internal.h是过渡性配置文件,真正的配置不在这里,在lv_conf_template.h文件中,我的SDK将该文件更名并放在以下路径:

“platform\board\tx510_evb\include\lv_conf_board.h”

移植过程解析

公版的lvgl个人认为移植非常简单,需要修改和适配的地方很少;如下:

lv_conf_template.h? ? ? ? 功能配置文件(已修改为lv_conf_board.h)

porting文件夹下的文件? ? ? ? 前文说了这里面是示例,打开注释可以直接用起来

lv_user_api.c? ? ? ? ? ? ? ? ? ? ? ? 用户可以在该文件下编辑GUI效果

/*如果是Alios thing、Linux等cmake编译,需要对应平台修改makefile文件*/

常用的平台如STM32只需要将源码插入SDK,并创建好关联即可。

lv_conf_template.h 中比较重要的配置:

//屏幕的尺寸
#define?LV_HOR_RES_MAX??????????(720)
#define?LV_VER_RES_MAX??????????(1280)

根据自己屏幕的类型选择,常见的是16位和32位屏幕
/* Color depth:
 * - 1:  1 byte per pixel
 * - 8:  RGB332
 * - 16: RGB565
 * - 32: ARGB8888
 */
#define LV_COLOR_DEPTH     32

分配给lvgl的空间大小,至少需要2K,如果空间足够,建议适量增加
#define LV_MEM_SIZE    (128U * 1024U)

porting下的文件复制出来并做如下更名,文件位置没限制:

//porting下的文件:
lv_port_disp_template.c
lv_port_disp_template.h
lv_port_indev_template.c
lv_port_indev_template.h
//分别改名为:
lv_port_disp.c
lv_port_disp.h
lv_port_indev.c
lv_port_indev.h

某国产平台修改后的路径如下:

?lv_port_disp.c 中注意如下几点:

lv_port_disp_init? 分配显存大小、配置分辨率、配置callback函数

    static lv_disp_buf_t draw_buf_dsc_1;
    static lv_color_t draw_buf_1[LV_HOR_RES_MAX * 10];                         
    lv_disp_buf_init(&draw_buf_dsc_1, draw_buf_1, NULL, LV_HOR_RES_MAX * 10);   

    disp_drv.hor_res = 480;
    disp_drv.ver_res = 320;

    /*Used to copy the buffer's content to the display*/
    disp_drv.flush_cb = disp_flush;

    /*Set a display buffer*/
    disp_drv.buffer = &draw_buf_dsc_1;

disp_flush? ? ? ? ?将处理好的图像数据搬运到对应显存

/*国产某平台需要在第一次进入disp_flush时打开DPU分配给lvgl的图层,该部分可以更好的管理DPU图层*/
    if (not_init) {
        csi_dpu_layer_enable(handle, layer_id, 0);
        csi_dpu_layer_set_config(handle, layer_id, &cfg);
        //csi_dpu_layer_enable(handle, layer_id, 1);    //jones 20210622 防止贴图提前显示
        not_init = false;
    }

/*如注释,这个函数必须在disp_flush最后调用*/
    /* IMPORTANT!!!
     * Inform the graphics library that you are ready with the flushing*/
    lv_disp_flush_ready(disp_drv);

lv_port_indev.c 是触摸的初始化,未测试不做介绍;

lv_user_api.c? ? ? ? GUI的初始化,UI设计放在这里

最后

我们总结一下lvgl应用层架构:

lv_gui_init(应用层初始化接口)?->?lv_port_disp_init(初始化lvgl和显示设备) -> 编辑UI样式 -> 完成lvgl初始化

如果不是动态的UI,到这里基本可以实现显示,因依托于平台介绍,不尽详细,欢迎留言交流

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:59:50  更:2021-08-06 10:02:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/16 4:17:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码