lvgl报错No screen found

lvgl报错打印如下

请教下可能的原因有哪些呢?

找不到活动屏幕。。

是不是发生在不同屏幕切换的时候?

使用lv_scr_load或者lv_scr_load_anim切换到另一个屏幕时,之前的屏幕会被清除(但实际上内存并没有释放)。如果再使用如上函数加载回原来的屏幕,就会出现no screen found的报错。

可以先清除屏幕上所有控件(释放之前的内存), 再重新绘制屏幕控件,最后再加载屏幕,例如:

/**
 * @brief 展示主界面
 * @param lv_scr_load_anim_t 展示主界面的动画,-1 不使用动画
 */
void show_ui_home(lv_scr_load_anim_t anim)
{
    lv_obj_clean(lv_scr_act()); // 删除当前屏幕上所有控件

    ui_home_create(); // 创建控件

    if(anim == -1) { // 选择是否动画展示主界面
        lv_scr_load(this->screen);  // this->screen 为需要展示的屏幕
    } else {
        lv_scr_load_anim(this->screen, anim, 100, 0, true);
    }
}

当然还有另一种可能的情况:

你使用lv_obj_del(lv_scr_act());删除了正在活动的屏幕,当你一旦调用了该屏幕上的控件,就会出现如题报错。可以使用lv_obj_clean();来只清除子控件,而不清除屏幕。

没有切换屏幕,是用定时器1.5s读取一次数据并写入textarea中,在调用lv_textarea_set_text之后报这个警告,出现段错误

那就要看看你这个textarea是不是在当前的活动屏幕中,你这个错误看起来就是textarea指向的内存空间不存在,而又调用lv_textarea_set_text来对其进行操作,而导致的指针异常。

你可以看看你的代码中是否存在以下问题:
1.在调用lv_textarea_set_text()时,该ta是否处在当前的活动屏幕。
2.ta是否被异常销毁了,如使用lv_obj_del()或lv_obj_clean()清除了ta的父对象。
总之,你要确保ta所指向的控件是正常显示的。

如果,不存在以上问题,建议贴下你的代码来看看。

排查了代码,发现是在这里出错

对应打印了日志

可以判断出该对象是textarea,但是在获取具体的文本信息时就会报段错误,如果没有30转为0,再从0转为30的话就是一直正常运行,请教下这种可能是什么原因