Add task_list_changed flag

This commit is contained in:
Themba Dube
2020-01-05 09:27:09 -05:00
parent 7fcd4669a4
commit f583b4ffd5

View File

@@ -40,6 +40,7 @@ static uint32_t lv_task_time_remaining(lv_task_t * task);
static bool lv_task_run = false; static bool lv_task_run = false;
static uint8_t idle_last = 0; static uint8_t idle_last = 0;
static bool task_deleted; static bool task_deleted;
static bool task_list_changed;
static bool task_created; static bool task_created;
/********************** /**********************
@@ -57,6 +58,7 @@ void lv_task_core_init(void)
{ {
lv_ll_init(&LV_GC_ROOT(_lv_task_ll), sizeof(lv_task_t)); lv_ll_init(&LV_GC_ROOT(_lv_task_ll), sizeof(lv_task_t));
task_list_changed = false;
/*Initially enable the lv_task handling*/ /*Initially enable the lv_task handling*/
lv_task_enable(true); lv_task_enable(true);
} }
@@ -152,6 +154,13 @@ LV_ATTRIBUTE_TASK_HANDLER uint32_t lv_task_handler(void)
break; break;
} }
if(task_list_changed) {
task_interrupter = NULL;
end_flag = false;
task_list_changed = false;
break;
}
LV_GC_ROOT(_lv_task_act) = next; /*Load the next task*/ LV_GC_ROOT(_lv_task_act) = next; /*Load the next task*/
} }
} while(!end_flag); } while(!end_flag);
@@ -165,6 +174,7 @@ LV_ATTRIBUTE_TASK_HANDLER uint32_t lv_task_handler(void)
busy_time = 0; busy_time = 0;
idle_period_start = lv_tick_get(); idle_period_start = lv_tick_get();
} }
time_till_next = LV_NO_TASK_READY; time_till_next = LV_NO_TASK_READY;
next = lv_ll_get_head(&LV_GC_ROOT(_lv_task_ll)); next = lv_ll_get_head(&LV_GC_ROOT(_lv_task_ll));
while(next) { while(next) {
@@ -176,6 +186,7 @@ LV_ATTRIBUTE_TASK_HANDLER uint32_t lv_task_handler(void)
next = lv_ll_get_next(&LV_GC_ROOT(_lv_task_ll), next); /*Find the next task*/ next = lv_ll_get_next(&LV_GC_ROOT(_lv_task_ll), next); /*Find the next task*/
} }
already_running = false; /*Release the mutex*/ already_running = false; /*Release the mutex*/
LV_LOG_TRACE("lv_task_handler ready"); LV_LOG_TRACE("lv_task_handler ready");
@@ -219,6 +230,7 @@ lv_task_t * lv_task_create_basic(void)
if(new_task == NULL) return NULL; if(new_task == NULL) return NULL;
} }
} }
task_list_changed = true;
new_task->period = DEF_PERIOD; new_task->period = DEF_PERIOD;
new_task->task_cb = NULL; new_task->task_cb = NULL;
@@ -275,6 +287,7 @@ void lv_task_set_cb(lv_task_t * task, lv_task_cb_t task_cb)
void lv_task_del(lv_task_t * task) void lv_task_del(lv_task_t * task)
{ {
lv_ll_remove(&LV_GC_ROOT(_lv_task_ll), task); lv_ll_remove(&LV_GC_ROOT(_lv_task_ll), task);
task_list_changed = true;
lv_mem_free(task); lv_mem_free(task);
@@ -304,6 +317,7 @@ void lv_task_set_prio(lv_task_t * task, lv_task_prio_t prio)
if(i == NULL) { if(i == NULL) {
lv_ll_move_before(&LV_GC_ROOT(_lv_task_ll), task, NULL); lv_ll_move_before(&LV_GC_ROOT(_lv_task_ll), task, NULL);
} }
task_list_changed = true;
task->prio = prio; task->prio = prio;
} }