Appearance
移植
移植关键点
显示是必须的
实际移植
把库文件放在GUI/lvgl文件夹里面
把示例文件放在GUI_APP文件夹里面
出现问题, 找不到文件lv_conf.h, 需要把跟文件夹下面的lv_conf_template.h改名
输入输出配置
缓冲有三种:
- 单缓冲: 当屏幕的大小是800*480的时候, 设置的buf大小是十行的像素的大小
- 双缓冲: 有两个十行大小的buf, 交替使用(这个版本的优化不是很好)
- 全屏幕双缓冲
这里使用第一种, 添加宽度的宏定义, 之后屏蔽后面的代码
在设置屏幕的显示等都是在函数lv_port_disp_init里面实现的
设置屏幕尺寸, 分别是水平和竖直的长度
设置打点的方式
输入设备配置
删除其他设备的函数声明和结构体
lv_port_indev_init函数里面把不需要的设备删除
初始化
检测是否有触摸
获取坐标
提供时基
在这个函数里面主要就是增加时基
cLV_ATTRIBUTE_TICK_INC void lv_tick_inc(uint32_t tick_period) { tick_irq_flag = 0; sys_time += tick_period; }
测试
在这一步会报错, 因为使用的内存过大
使用外部的SRAM
管理空间
把内部管理空间放在外面, 这一个不推荐, 会使得速度降低
绘图空间
在创建缓冲区的时候, 放在外部的空间
内存管理
LVGL使用内存的地方是LVGL的管理, 图形缓冲区, OS以及其他一般使用15~40K字节
自研内存管理
- 配置需要的内存池大小
- 初始化需要的内存池
- 配置自己的算法
编写lvgl的内存分配, 内存释放, 内存重新分配这三个函数, 在lv_conf.h这一个文件里面
自带内存管理
这一个内存的大小是通过lv_conf.h文件里面的LV_MEM_SIZE这一个宏定义进行控制
创建一个需要管理的内存池有三种方法1. 大数组(默认) 2. 地址段 3. 内存分配
c
/**********************
* GLOBAL FUNCTIONS
**********************/
/**
* Initialize the dyn_mem module (work memory and other variables)
*/
void lv_mem_init(void)
{
#if LV_MEM_CUSTOM == 0
#if LV_MEM_ADR == 0
#ifdef LV_MEM_POOL_ALLOC
//使用函数进行分配
tlsf = lv_tlsf_create_with_pool((void *)LV_MEM_POOL_ALLOC(LV_MEM_SIZE), LV_MEM_SIZE);
#else
/*Allocate a large array to store the dynamically allocated data*/
//定义一个大数组, 这一个是默认的方法
static LV_ATTRIBUTE_LARGE_RAM_ARRAY MEM_UNIT work_mem_int[LV_MEM_SIZE / sizeof(MEM_UNIT)];
tlsf = lv_tlsf_create_with_pool((void *)work_mem_int, LV_MEM_SIZE);
#endif
#else
//使用一块内存地址
tlsf = lv_tlsf_create_with_pool((void *)LV_MEM_ADR, LV_MEM_SIZE);
#endif
#endif
#if LV_MEM_ADD_JUNK
LV_LOG_WARN("LV_MEM_ADD_JUNK is enabled which makes LVGL much slower");
#endif
}
使用DMA2D
lv_conf.h文件里面
c
/*-------------
* GPU
*-----------*/
/*Use STM32's DMA2D (aka Chrom Art) GPU*/
#define LV_USE_GPU_STM32_DMA2D 0
#if LV_USE_GPU_STM32_DMA2D
/*Must be defined to include path of CMSIS header of target processor
e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
#define LV_GPU_DMA2D_CMSIS_INCLUDE
#endif
之后在这里加一下头文件, 在MDK配置里面添加一下这一个芯片的宏定义, 实际使用的时候还是在之前自己写的那一个填充函数里面使用DMA2D
文件
- lv_port_disp_template.c/h 输出设备的配置文件
- lv_port_indev_template.c/h 输入设备的配置文件
- lv_conf.h 配置文件
lv_conf.h文件
- 颜色, 深度, 字节交换, 屏幕透明
- 内存, 算法的选择, 内存的大小
- 硬件层, 显示的周期以及输入设备的读取周期
- 特征, 绘图, 日志, 以及帧率显示
- 编辑器, 大数组前缀, 内存对齐
- 字体, 系统字体以及自定义字体
- 文本, 字符编码, 文本特性
- 核心部件, 使能以及失能部件
- 拓展, 使能失能第三方部件
- 实例