ESP32 LVGL屏幕不能切换报 panic‘ed (StoreProhibited). Exception was unhandled

ESP32 LVGL屏幕不能切换bug问题
故障现象
通过NXP guider或者squareline 等GUI工具做一个启动动画-延时切换时,不能切换且,来回重启,报以下错误
Guru Meditation Error: Core 0 panic’ed (StoreProhibited). Exception was unhandled.
在这里插入图片描述
错误位置定位 lv_disp.c
//
解决过程
根据经验增加mem 堆栈,没有效果,查看CPU\内存占用率没有发现问题,好几天没解决,静下心分析,根据提示应该又是空指针赋值可能重新组织最简单测试代码。
lv_obj_t * label_1;
lv_obj_t * label_2;

lv_obj_t * show1;
lv_obj_t * show2;
//事件处理
void ui_event_Screen1(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
if(event_code == LV_EVENT_SCREEN_LOADED)
{
lv_scr_load_anim(show2, LV_SCR_LOAD_ANIM_NONE, 1000, 1000, false);
}
}
//测试demo
void UI_Init()
{
show1= lv_obj_create(NULL);
label_1 =lv_label_create(show1);//创建label
lv_label_set_recolor(label_1,1);//颜色可变换
lv_label_set_long_mode(label_1,LV_LABEL_LONG_SCROLL_CIRCULAR);//设置滚动模式
lv_obj_set_pos(label_1,0,0);//设置位置
lv_obj_set_size(label_1,200,30);//设定大小
lv_label_set_text(label_1, “This is GMinfo”);//设定文本内容 光密信息

     lv_obj_add_event_cb(show1, ui_event_Screen1, LV_EVENT_ALL, NULL);//动画切换

    show2= lv_obj_create(NULL); 
    label_2 =lv_label_create(show2);//创建label
    lv_label_set_recolor(label_2,1);//颜色可变换
    lv_label_set_long_mode(label_2,LV_LABEL_LONG_SCROLL_CIRCULAR);//设置滚动模式
    lv_obj_set_pos(label_2,0,0);//设置位置
    lv_obj_set_size(label_2,200,30);//设定大小
    lv_label_set_text(label_2, "GMinfo laozhou");//设定文本内容
     lv_disp_load_scr(show1);
 }
 经过对比发现
  lv_disp_load_scr(show1);时实际也是调用动画切换
  void lv_disp_load_scr(lv_obj_t * scr)
{
    lv_scr_load_anim(scr, LV_SCR_LOAD_ANIM_NONE, 0, 0, false);
}
唯一不同是time delay都是0,所以将事件改成
lv_scr_load_anim(show2, LV_SCR_LOAD_ANIM_NONE, 0, 0, false);
跳转没有问题,随后进入lv_scr_load_anim函数设置测试打印标志,开始那部分代码就是对比是否窗口冲突,清除style等,到
if(time == 0 && delay == 0)
 {
   scr_load_internal(new_scr);
   return;
}才是关键time = 0  delay = 0刷新加载新界面说明问题在这之后
结合调试提示,也说明问题异常提示的位置也是对的,问题定位在scr_load_anim_start

在这里插入图片描述
以下是原代码
在这里插入图片描述
增加空指针检测发现 if(!d) return; ///
代码不往下继续执行所以空指针赋值在这条代码处 d->prev_scr = lv_scr_act();
就是报句柄问题。翻看其它函数发现可以获取默认屏幕切换变量指针,不采用通过传入界面获取屏幕前后页切换参数。
在这里插入图片描述
经过修改编译后通过,再次运行发现scr_anim_ready()也存在这样问题
在这里插入图片描述
修改后测试通过,可以从启动页面切换到主界面。
此篇献给还在LVGL 界面切换煎熬的小伙伴,你觉的有用点个赞吧!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息安全专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值