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所指向的控件是正常显示的。
如果,不存在以上问题,建议贴下你的代码来看看。