Enable Micropython gc (Garbage Collection) on lvgl. This is controlled by LV_ENABLE_GC macro defined in lv_conf.h. When enabled, lv_conf.h should also define LV_MEM_CUSTOM_REALLOC, LV_MEM_CUSTOM_GET_SIZE, LV_GC_INCLUDE and LV_GC_ROOT
This commit is contained in:
@@ -14,6 +14,12 @@
|
||||
#include "../lv_hal/lv_hal_disp.h"
|
||||
#include "../lv_misc/lv_mem.h"
|
||||
#include "../lv_core/lv_obj.h"
|
||||
#include "../lv_misc/lv_gc.h"
|
||||
|
||||
#if defined(LV_GC_INCLUDE)
|
||||
# include LV_GC_INCLUDE
|
||||
#endif /* LV_ENABLE_GC */
|
||||
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@@ -30,7 +36,6 @@
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
**********************/
|
||||
static lv_disp_t * disp_list = NULL;
|
||||
static lv_disp_t * active;
|
||||
|
||||
/**********************
|
||||
@@ -49,6 +54,7 @@ static lv_disp_t * active;
|
||||
*/
|
||||
void lv_disp_drv_init(lv_disp_drv_t * driver)
|
||||
{
|
||||
LV_GC_ROOT(disp_list) = NULL;
|
||||
driver->disp_fill = NULL;
|
||||
driver->disp_map = NULL;
|
||||
driver->disp_flush = NULL;
|
||||
@@ -81,12 +87,12 @@ lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
|
||||
node->next = NULL;
|
||||
|
||||
/* Set first display as active by default */
|
||||
if(disp_list == NULL) {
|
||||
disp_list = node;
|
||||
if(LV_GC_ROOT(disp_list) == NULL) {
|
||||
LV_GC_ROOT(disp_list) = node;
|
||||
active = node;
|
||||
lv_obj_invalidate(lv_scr_act());
|
||||
} else {
|
||||
disp_list->next = node;
|
||||
((lv_disp_t*)LV_GC_ROOT(disp_list))->next = node;
|
||||
}
|
||||
|
||||
return node;
|
||||
@@ -120,10 +126,10 @@ lv_disp_t * lv_disp_get_active(void)
|
||||
lv_disp_t * lv_disp_next(lv_disp_t * disp)
|
||||
{
|
||||
if(disp == NULL) {
|
||||
return disp_list;
|
||||
return LV_GC_ROOT(disp_list);
|
||||
} else {
|
||||
if(disp_list->next == NULL) return NULL;
|
||||
else return disp_list->next;
|
||||
if(((lv_disp_t*)LV_GC_ROOT(disp_list))->next == NULL) return NULL;
|
||||
else return ((lv_disp_t*)LV_GC_ROOT(disp_list))->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,12 @@
|
||||
*********************/
|
||||
#include "../lv_hal/lv_hal_indev.h"
|
||||
#include "../lv_misc/lv_mem.h"
|
||||
#include "../lv_misc/lv_gc.h"
|
||||
|
||||
#if defined(LV_GC_INCLUDE)
|
||||
# include LV_GC_INCLUDE
|
||||
#endif /* LV_ENABLE_GC */
|
||||
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@@ -22,7 +28,6 @@
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
static lv_indev_t * indev_list = NULL;
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
@@ -44,6 +49,7 @@ static lv_indev_t * indev_list = NULL;
|
||||
*/
|
||||
void lv_indev_drv_init(lv_indev_drv_t * driver)
|
||||
{
|
||||
LV_GC_ROOT(indev_list) = NULL;
|
||||
driver->read = NULL;
|
||||
driver->type = LV_INDEV_TYPE_NONE;
|
||||
driver->user_data = NULL;
|
||||
@@ -70,10 +76,10 @@ lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver)
|
||||
node->group = NULL;
|
||||
node->btn_points = NULL;
|
||||
|
||||
if(indev_list == NULL) {
|
||||
indev_list = node;
|
||||
if(LV_GC_ROOT(indev_list) == NULL) {
|
||||
LV_GC_ROOT(indev_list) = node;
|
||||
} else {
|
||||
lv_indev_t * last = indev_list;
|
||||
lv_indev_t * last = LV_GC_ROOT(indev_list);
|
||||
while(last->next)
|
||||
last = last->next;
|
||||
|
||||
@@ -92,7 +98,7 @@ lv_indev_t * lv_indev_next(lv_indev_t * indev)
|
||||
{
|
||||
|
||||
if(indev == NULL) {
|
||||
return indev_list;
|
||||
return LV_GC_ROOT(indev_list);
|
||||
} else {
|
||||
if(indev->next == NULL) return NULL;
|
||||
else return indev->next;
|
||||
|
||||
Reference in New Issue
Block a user