移植通用流程
- 下载lvgl源码
https://github.com/lvgl/lvgl/
- 删除没有用的文件和文件夹

-
将lv_conf_template.h复制并改名为lv_conf.h
-
修改lv_conf.h中的#if 0为#if 1
-
lvgl代码初始化流程:
- 设置分辨率和缓冲区大小。
#define LV_HOR_RES_MAX 480 // 水平分辨率 #define LV_VER_RES_MAX 320 // 垂直分辨率 #define LV_BUF_SIZE (LV_HOR_RES_MAX * 5) // 缓冲区大小(行数) static lv_disp_draw_buf_t draw_buf; // LVGL绘制缓冲区 静态分配内存? static lv_color_t buf1[LV_BUF_SIZE]; // 第一缓冲区 static lv_color_t buf2[LV_BUF_SIZE]; // 第二缓冲区(双缓冲) lv_disp_draw_buf_init(&draw_buf, buf1, buf2, LV_BUF_SIZE);- 给lvgl提供心跳时钟
lv_tick_inc(1); // 可以在定时中断或者linux定时函数中调用- 注册显示驱动,为lvgl提供绘图函数
static lv_disp_drv_t disp_drv; lv_disp_drv_init(&disp_drv); disp_drv.hor_res = 480;//设置LVGL实际分辨率 disp_drv.ver_res = 320; disp_drv.flush_cb = my_disp_flush; // 注册刷新回调 disp_drv.draw_buf = &draw_buf; lv_disp_drv_register(&disp_drv);- 提供绘图函数给lvgl
void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) { //调用硬件进行画矩形或者画像素点 // 通知LVGL绘画完成 lv_disp_flush_ready(disp); }- 输入设备(伪代码)
void evdev_read(lv_indev_drv_t * drv, lv_indev_data_t * data){ data->point.x = x;//具体的x坐标 data->point.y = y;//具体的y坐标 data->state = type;//按下的类型 } static lv_indev_drv_t indev_drv; lv_indev_drv_init(&indev_drv); indev_drv.type = LV_INDEV_TYPE_POINTER; indev_drv.read_cb = evdev_read; lv_indev_drv_register(&indev_drv);- 在main里面调用lv_init(),在while(1)调用lv_timer_handler()。
lv_timer_handler()LVGL调度函数,发现需要重绘,安排刷新,发现LVGL定时器完成处理定时回调,分发用户输入事件的回调。
MCU移植
ESP(arduino)
具体移步到
099_lvgl初始化基于esp8266.md
ESP(idf)
待写
常规mcu
待写
Linux移植
具体移步到
099_lvgl移植到imx6ull.md
099_lvgl移植linux-通用.md