Add _lv_mem_buf as root pointer for gc
This commit is contained in:
@@ -16,6 +16,10 @@
|
||||
#include LV_MEM_CUSTOM_INCLUDE
|
||||
#endif
|
||||
|
||||
#if defined(LV_GC_INCLUDE)
|
||||
#include LV_GC_INCLUDE
|
||||
#endif /* LV_ENABLE_GC */
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
@@ -403,23 +407,23 @@ void * lv_mem_buf_get(uint32_t size)
|
||||
/*Try to find a free buffer with suitable size */
|
||||
uint8_t i;
|
||||
for(i = 0; i < LV_MEM_BUF_MAX_NUM; i++) {
|
||||
if(_lv_mem_buf[i].used == 0 && _lv_mem_buf[i].size >= size) {
|
||||
_lv_mem_buf[i].used = 1;
|
||||
return _lv_mem_buf[i].p;
|
||||
if(LV_GC_ROOT(_lv_mem_buf[i]).used == 0 && LV_GC_ROOT(_lv_mem_buf[i]).size >= size) {
|
||||
LV_GC_ROOT(_lv_mem_buf[i]).used = 1;
|
||||
return LV_GC_ROOT(_lv_mem_buf[i]).p;
|
||||
}
|
||||
}
|
||||
|
||||
/*Reallocate a free buffer*/
|
||||
for(i = 0; i < LV_MEM_BUF_MAX_NUM; i++) {
|
||||
if(_lv_mem_buf[i].used == 0) {
|
||||
_lv_mem_buf[i].used = 1;
|
||||
_lv_mem_buf[i].size = size;
|
||||
if(LV_GC_ROOT(_lv_mem_buf[i]).used == 0) {
|
||||
LV_GC_ROOT(_lv_mem_buf[i]).used = 1;
|
||||
LV_GC_ROOT(_lv_mem_buf[i]).size = size;
|
||||
/*if this fails you probably need to increase your LV_MEM_SIZE/heap size*/
|
||||
_lv_mem_buf[i].p = lv_mem_realloc(_lv_mem_buf[i].p, size);
|
||||
if(_lv_mem_buf[i].p == NULL) {
|
||||
LV_GC_ROOT(_lv_mem_buf[i]).p = lv_mem_realloc(LV_GC_ROOT(_lv_mem_buf[i]).p, size);
|
||||
if(LV_GC_ROOT(_lv_mem_buf[i]).p == NULL) {
|
||||
LV_LOG_ERROR("lv_mem_buf_get: Out of memory, can't allocate a new buffer (increase your LV_MEM_SIZE/heap size)")
|
||||
}
|
||||
return _lv_mem_buf[i].p;
|
||||
return LV_GC_ROOT(_lv_mem_buf[i]).p;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -436,8 +440,8 @@ void lv_mem_buf_release(void * p)
|
||||
{
|
||||
uint8_t i;
|
||||
for(i = 0; i < LV_MEM_BUF_MAX_NUM; i++) {
|
||||
if(_lv_mem_buf[i].p == p) {
|
||||
_lv_mem_buf[i].used = 0;
|
||||
if(LV_GC_ROOT(_lv_mem_buf[i]).p == p) {
|
||||
LV_GC_ROOT(_lv_mem_buf[i]).used = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -452,11 +456,11 @@ void lv_mem_buf_free_all(void)
|
||||
{
|
||||
uint8_t i;
|
||||
for(i = 0; i < LV_MEM_BUF_MAX_NUM; i++) {
|
||||
if(_lv_mem_buf[i].p) {
|
||||
lv_mem_free(_lv_mem_buf[i].p);
|
||||
_lv_mem_buf[i].p = NULL;
|
||||
_lv_mem_buf[i].used = 0;
|
||||
_lv_mem_buf[i].size = 0;
|
||||
if(LV_GC_ROOT(_lv_mem_buf[i]).p) {
|
||||
lv_mem_free(LV_GC_ROOT(_lv_mem_buf[i]).p);
|
||||
LV_GC_ROOT(_lv_mem_buf[i]).p = NULL;
|
||||
LV_GC_ROOT(_lv_mem_buf[i]).used = 0;
|
||||
LV_GC_ROOT(_lv_mem_buf[i]).size = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user