diff --git a/src/core/lv_obj_pos.c b/src/core/lv_obj_pos.c index 196847e3a..f904ed0aa 100644 --- a/src/core/lv_obj_pos.c +++ b/src/core/lv_obj_pos.c @@ -292,7 +292,7 @@ void lv_obj_mark_layout_as_dirty(lv_obj_t * obj) /*Make the display refreshing*/ lv_disp_t * disp = lv_obj_get_disp(scr); - lv_timer_resume(disp->refr_timer); + if(disp->refr_timer) lv_timer_resume(disp->refr_timer); } void lv_obj_update_layout(const lv_obj_t * obj) diff --git a/src/core/lv_refr.c b/src/core/lv_refr.c index a44060a5e..1fba0542f 100644 --- a/src/core/lv_refr.c +++ b/src/core/lv_refr.c @@ -86,13 +86,13 @@ void lv_refr_now(lv_disp_t * disp) lv_anim_refr_now(); if(disp) { - _lv_disp_refr_timer(disp->refr_timer); + if(disp->refr_timer) _lv_disp_refr_timer(disp->refr_timer); } else { lv_disp_t * d; d = lv_disp_get_next(NULL); while(d) { - _lv_disp_refr_timer(d->refr_timer); + if(d->refr_timer) _lv_disp_refr_timer(d->refr_timer); d = lv_disp_get_next(d); } } @@ -131,7 +131,7 @@ void _lv_inv_area(lv_disp_t * disp, const lv_area_t * area_p) if(disp->driver->full_refresh) { disp->inv_areas[0] = scr_area; disp->inv_p = 1; - lv_timer_resume(disp->refr_timer); + if(disp->refr_timer) lv_timer_resume(disp->refr_timer); return; } @@ -152,7 +152,7 @@ void _lv_inv_area(lv_disp_t * disp, const lv_area_t * area_p) lv_area_copy(&disp->inv_areas[disp->inv_p], &scr_area); } disp->inv_p++; - lv_timer_resume(disp->refr_timer); + if(disp->refr_timer) lv_timer_resume(disp->refr_timer); } /** @@ -186,15 +186,19 @@ void _lv_disp_refr_timer(lv_timer_t * tmr) uint32_t start = lv_tick_get(); volatile uint32_t elaps = 0; - disp_refr = tmr->user_data; - + if(tmr) { + disp_refr = tmr->user_data; #if LV_USE_PERF_MONITOR == 0 && LV_USE_MEM_MONITOR == 0 - /** - * Ensure the timer does not run again automatically. - * This is done before refreshing in case refreshing invalidates something else. - */ - lv_timer_pause(tmr); + /** + * Ensure the timer does not run again automatically. + * This is done before refreshing in case refreshing invalidates something else. + */ + lv_timer_pause(tmr); #endif + } + else { + disp_refr = lv_disp_get_default(); + } /*Refresh the screen's layout if required*/ lv_obj_update_layout(disp_refr->act_scr); diff --git a/src/hal/lv_hal_disp.c b/src/hal/lv_hal_disp.c index 43b7f4367..036ed2261 100644 --- a/src/hal/lv_hal_disp.c +++ b/src/hal/lv_hal_disp.c @@ -259,7 +259,7 @@ void lv_disp_remove(lv_disp_t * disp) } _lv_ll_remove(&LV_GC_ROOT(_lv_disp_ll), disp); - lv_timer_del(disp->refr_timer); + if(disp->refr_timer) lv_timer_del(disp->refr_timer); lv_mem_free(disp); if(was_default) lv_disp_set_default(_lv_ll_get_head(&LV_GC_ROOT(_lv_disp_ll)));