RT-Thread qemu LVGL9.5 LV_LOG_USER 输出打印适配

说明

  • RT-Thread : 5.2.0

  • LVGL 9.5

  • BSP : qemu-vexpress-a9

默认 LVGL LV_LOG_USER 没有输出,想对接到 RT-Thread 的控制台输出 rt_kprinf

LVGL 的 LOG开启

  • LVGL 的 lv_conf.h 中,配置设置如下,如果没有就添加
c 复制代码
#define LV_USE_LOG                  1
#define LV_LOG_LEVEL                LV_LOG_LEVEL_USER
  • 等级 LV_LOG_LEVEL_USER 说明 LV_LOG_USER 可以输出

注册 LVGL log 输出的 callback

  • lv_log_register_print_cb 可以设置 LVGL 的打印回调函数,回调函数中,采用 rt_kprintf 输出即可
c 复制代码
void rtt_log_cb(lv_log_level_t level, const char * buf)
{
    rt_kprintf(buf);
}

void lv_user_gui_init(void)
{
    lv_log_register_print_cb(rtt_log_cb);
    lv_example_button_1();
}

测试示例

c 复制代码
#include <stdint.h>
#include <stdio.h>
#include <rtthread.h>
#include <lvgl.h>

void rtt_log_cb(lv_log_level_t level, const char * buf)
{
    rt_kprintf(buf);
}

static void event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);

    if(code == LV_EVENT_CLICKED) {
        LV_LOG_USER("Clicked");
    }
    else if(code == LV_EVENT_VALUE_CHANGED) {
        LV_LOG_USER("Toggled");
    }
}

void lv_example_button_1(void)
{
    lv_obj_t * label;

    lv_obj_t * btn1 = lv_button_create(lv_screen_active());
    lv_obj_add_event_cb(btn1, event_handler, LV_EVENT_ALL, NULL);
    lv_obj_align(btn1, LV_ALIGN_CENTER, 0, -40);
    lv_obj_remove_flag(btn1, LV_OBJ_FLAG_PRESS_LOCK);

    label = lv_label_create(btn1);
    lv_label_set_text(label, "Button");
    lv_obj_center(label);

    lv_obj_t * btn2 = lv_button_create(lv_screen_active());
    lv_obj_add_event_cb(btn2, event_handler, LV_EVENT_ALL, NULL);
    lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 40);
    lv_obj_add_flag(btn2, LV_OBJ_FLAG_CHECKABLE);
    lv_obj_set_height(btn2, LV_SIZE_CONTENT);

    label = lv_label_create(btn2);
    lv_label_set_text(label, "Toggle");
    lv_obj_center(label);
}

void lv_user_gui_init(void)
{
    lv_log_register_print_cb(rtt_log_cb);
    lv_example_button_1();
}

int main(void)
{
    rt_kprintf("Hello RT-Thread!\n");

    return 0;
}

输出效果

  • LVGL 的 LOG 通过 RT-Thread 默认的 rt_kprintf 打印
相关推荐
长安第一美人9 天前
RT-Thread 工业屏驱动开发实战:UART 串口屏协议解析 + 数据实时刷新 + 设备驱动框架完整实现
驱动开发·嵌入式硬件·rt-thread·工业控制·uart通信·串口屏驱动
longji9 天前
win11 使用 QEMU11 模拟器跑龙芯系统(debian13,openKylin,openEuler,uos,Loongnix)
qemu·龙芯模拟器
小灰灰搞电子12 天前
rt-thread 解析sbus协议源码分享
rt-thread·sbus
xzl0414 天前
LVGL显示移植:lv_port_disp.c 详情介绍
rt-thread·lvgl·ra6m3-hmi-board
DarrenHChen_EDA15 天前
【Backend Flow工程实践 27】Backend Script Template:一个可维护的后端脚本体系应该如何组织?
eda·log·tcl·parameter·regression·backend flow·script template
冰山一脚201319 天前
qemu的板级初始化笔记(以i4ffx为例)
qemu
冰山一脚201319 天前
CPU的L1、L2、L3缓存笔记
qemu
xzl0420 天前
PL111 RGB LCD时序配置详解
rt-thread·pl111
xzl0421 天前
LVGL 启动流程全解析:RT-Thread 下的界面渲染链路
rt-thread·lvgl
xzl0421 天前
LVGL Coffee UI 接入实战:问题解决全记录
ui·rt-thread·lvgl