LVGL 报错记录

前言

由于项目有多个屏幕,guider 生成的代码,会默认给每个屏幕添加一个flag = true,表示当前屏幕未加载,需要进行初始化。

但是我发现,如果发生了屏幕跳转之后,也就是原来的屏幕flag 不设置成 flag = false; 就会触发系统的看门狗复位

代码

/**
 * @brief 从当前屏幕切换到目标屏幕
 * @param source 原屏幕
 * @param target 目标屏幕
*/
void toggle_screen_from_source_to_target(SCREEN_NAME source,SCREEN_NAME target){

		if(source == target) return;
		sendFlag = false;
		lv_obj_t *act_scr = lv_scr_act();
		lv_disp_t *d = lv_obj_get_disp(act_scr);
		if (d->prev_scr == NULL && (d->scr_to_load == NULL || d->scr_to_load == act_scr))
		{

			switch (target)
			{	
				case SCREEN_LOGO: 
					if(guider_ui.logo_screen_del) setup_scr_logo_screen(&guider_ui);
					lv_scr_load_anim(guider_ui.logo_screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, false);
					break;
				case SCREEN_MAIN:
					if(guider_ui.main_screen_del)  setup_scr_main_screen(&guider_ui);
					lv_scr_load_anim(guider_ui.main_screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, false);
					break;
				case SCREEN_TOPMENUS:
					if(guider_ui.topmenus_screen_del)  setup_scr_topmenus_screen(&guider_ui);
					lv_scr_load_anim(guider_ui.topmenus_screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, false);
					break;
				case SCREEN_TEMP:   
					if(guider_ui.tem_screen_del)  setup_scr_tem_screen(&guider_ui);
					lv_scr_load_anim(guider_ui.tem_screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, false);
					break;
				case SCREEN_TIME:   
					if(guider_ui.time_screen_del)  setup_scr_time_screen(&guider_ui);
					lv_scr_load_anim(guider_ui.time_screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, false);
					break;				
				case SCREEN_WORK:   
					if(guider_ui.work_screen_del)  setup_scr_work_screen(&guider_ui);
					lv_scr_load_anim(guider_ui.work_screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, false);
					break;					
				case SCREEN_OVER:
					if(guider_ui.over_screen_del)  setup_scr_over_screen(&guider_ui);
					lv_scr_load_anim(guider_ui.over_screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, false);
					break;						
				default:  break;
			}
			// 删除旧屏幕
			switch (source)
			{
				case SCREEN_LOGO:      guider_ui.logo_screen_del =true;        break;
				case SCREEN_MAIN:      guider_ui.main_screen_del =true;        break;
				case SCREEN_TOPMENUS:  guider_ui.topmenus_screen_del =true;    break;
				case SCREEN_TEMP:      guider_ui.tem_screen_del  =true;        break;
				case SCREEN_TIME:      guider_ui.time_screen_del =true;        break;
				case SCREEN_WORK:      guider_ui.work_screen_del =true;        break;
				case SCREEN_OVER:      guider_ui.over_screen_del =true;        break;
				default:	break;
			}
		}
}

上述代码是会导致看门狗复位的。

报错信息

E (333006) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:
E (333006) task_wdt:  - IDLE0 (CPU 0)
E (333006) task_wdt: Tasks currently running:
E (333006) task_wdt: CPU 0: lv_task_demo
E (333006) task_wdt: CPU 1: IDLE1
E (333006) task_wdt: Print CPU 0 (current core) backtrace


Backtrace: 0x42044EA2:0x3FC977C0 0x40377665:0x3FC977F0 0x42018A87:0x3FCEE0E0 0x42022B28:0x3FCEE150 0x4205AE81:0x3FCEE2C0 0x4201DBDB:0x3FCEE2E0 0x420599E5:0x3FCEE3B0 0x4200F85A:0x3FCEE3D0 0x4200F94F:0x3FCEE3F0 0x420158FD:0x3FCEE430 0x420159B9:0x3FCEE480 0x42015977:0x3FCEE4F0 0x420159B9:0x3FCEE540 0x42015D38:0x3FCEE5B0 0x42015F30:0x3FCEE5E0 0x42016B03:0x3FCEE6C0 0x42016CA2:0x3FCEE750 0x4200EC04:0x3FCEE770 0x4200A9E2:0x3FCEE790 0x4200F8AE:0x3FCEE7C0 0x4200F94F:0x3FCEE7E0 0x4200F2F9:0x3FCEE820 0x4201AD1A:0x3FCEE840 0x4201C2C3:0x3FCEE860 0x42008BC5:0x3FCEE890       
0x42044ea2: task_wdt_timeout_handling at D:/Espressif/frameworks/esp-idf-v5.2.2/components/esp_system/task_wdt/task_wdt.c:441
 (inlined by) task_wdt_isr at D:/Espressif/frameworks/esp-idf-v5.2.2/components/esp_system/task_wdt/task_wdt.c:515
0x40377665: _xt_lowint1 at D:/Espressif/frameworks/esp-idf-v5.2.2/components/xtensa/xtensa_vectors.S:1240
0x42018a87: circ_calc_aa4 at D:/Work/Project/A539/Code/develop/a539_v0_4/managed_components/lvgl__lvgl/src/draw/lv_draw_mask.c:1370 (discriminator 1)
 (inlined by) lv_draw_mask_radius_init at D:/Work/Project/A539/Code/develop/a539_v0_4/managed_components/lvgl__lvgl/src/draw/lv_draw_mask.c:529 (discriminator 1)
0x42022b28: lv_draw_sw_arc at D:/Work/Project/A539/Code/develop/a539_v0_4/managed_components/lvgl__lvgl/src/draw/sw/lv_draw_sw_arc.c:108
0x4205ae81: lv_draw_arc at D:/Work/Project/A539/Code/develop/a539_v0_4/managed_components/lvgl__lvgl/src/draw/lv_draw_arc.c:51
0x4201dbdb: lv_arc_draw at D:/Work/Project/A539/Code/develop/a539_v0_4/managed_components/lvgl__lvgl/src/widgets/lv_arc.c:672
 (inlined by) lv_arc_event at D:/Work/Project/A539/Code/develop/a539_v0_4/managed_components/lvgl__lvgl/src/widgets/lv_arc.c:640
 (inlined by) lv_arc_event at D:/Work/Project/A539/Code/develop/a539_v0_4/managed_components/lvgl__lvgl/src/widgets/lv_arc.c:414
0x420599e5: lv_obj_event_base at D:/Work/Project/A539/Code/develop/a539_v0_4/managed_components/lvgl__lvgl/src/core/lv_event.c:96
0x4200f85a: event_send_core at D:/Work/Project/A539/Code/develop/a539_v0_4/managed_components/lvgl__lvgl/src/core/lv_event.c:452

分析

个人初步分析是占用了太多内存,导致堆栈溢出,所以需要进行如下操作:

				case SCREEN_LOGO:      guider_ui.logo_screen_del =false;        break;
				case SCREEN_MAIN:      guider_ui.main_screen_del =false;        break;
				case SCREEN_TOPMENUS:  guider_ui.topmenus_screen_del =false;    break;
				case SCREEN_TEMP:      guider_ui.tem_screen_del  =false;        break;
				case SCREEN_TIME:      guider_ui.time_screen_del =false;        break;
				case SCREEN_WORK:      guider_ui.work_screen_del =false;        break;
				case SCREEN_OVER:      guider_ui.over_screen_del =false;        break;
				default:	break;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值