diff --git a/lv_misc/lv_mem.h b/lv_misc/lv_mem.h index 0dc3e9c5d2..daeb1a5777 100644 --- a/lv_misc/lv_mem.h +++ b/lv_misc/lv_mem.h @@ -27,13 +27,13 @@ extern "C" { typedef struct { - uint32_t free_cnt; - uint32_t used_cnt; - uint32_t free_size; uint32_t total_size; + uint32_t free_cnt; + uint32_t free_size; uint32_t free_biggest_size; - uint8_t frag_pct; + uint32_t used_cnt; uint8_t used_pct; + uint8_t frag_pct; }lv_mem_monitor_t; /********************** diff --git a/lv_misc/lv_task.c b/lv_misc/lv_task.c index 509e098ac8..927ab712be 100644 --- a/lv_misc/lv_task.c +++ b/lv_misc/lv_task.c @@ -14,6 +14,7 @@ /********************* * DEFINES *********************/ +#define IDLE_MEAS_PERIOD 500 /*[ms]*/ /********************** * TYPEDEFS @@ -55,8 +56,14 @@ void lv_task_init(void) */ void lv_task_handler(void) { + static uint32_t idle_period_start = 0; + static uint32_t handler_start = 0; + static uint32_t busy_time = 0; + if(lv_task_run == false) return; + handler_start = lv_tick_get(); + lv_task_t* lv_task_prio_a[LV_TASK_PRIO_NUM]; /*Lists for all prio.*/ lv_task_prio_t prio_act; bool prio_reset = false; /*Used to go back to the highest priority*/ @@ -100,6 +107,19 @@ void lv_task_handler(void) } } } + + + busy_time += lv_tick_elaps(handler_start); + uint32_t idle_period_time = lv_tick_elaps(idle_period_start); + if(idle_period_time >= IDLE_MEAS_PERIOD) { + + idle_last = (uint32_t)((uint32_t)busy_time * 100) / IDLE_MEAS_PERIOD; /*Calculate the busy percentage*/ + idle_last = idle_last > 100 ? 0 : 100 - idle_last; /*But we need idle time*/ + busy_time = 0; + idle_period_start = lv_tick_get(); + + + } } /** diff --git a/lv_misc/lv_task.h b/lv_misc/lv_task.h index a231d9e98a..604ce568e8 100644 --- a/lv_misc/lv_task.h +++ b/lv_misc/lv_task.h @@ -123,6 +123,12 @@ void lv_task_reset(lv_task_t* lv_task_p); */ void lv_task_enable(bool en); +/** + * Get idle percentage + * @return the lv_task idle in percentage + */ +uint8_t lv_task_get_idle(void); + /********************** * MACROS **********************/