LVGL页面切换导致内存增加

void Lcd_Delete_StartPage(void) {
lv_obj_del(StartPage);
// StartPage = NULL;
}
使用这个函数,删除当前界面,打开新的界面,来回切换几次可以看到内存在缓慢增加,样式我每个都增加了reset,请问还有哪些因素影响到内存的增加呢?

1 Like

有没有在创建页面时创建软件定时器之类的东西?

没有,就正常创建,请问还有什么因素会影响内存增加呢

那就需要贴出你切换的两个界面的源码了

1 Like

可以说说哪些部件,或者还有什么需要注意会导致内存增加的我自己看看

这很大原因可能是内存碎片导致的,malloc/free和lvgl的内存管理算法并不保证不出现内存碎片问题,lvgl的内存管理在v9版本会有所改进。减少 lv_obj_del 或 lv_style_reset 及其他会申请/释放空间的函数 的使用频率能改善这个问题。

界面很多,隐藏了不是也会持续占用单片机的RAM内存吗

最好贴上代码大家一起看看分析,这样空想猜测意义不大

        Lcd_Delete_UserMenu();
        Lcd_Main_Page_Create();

还需要这2个函数的代码:
Lcd_Delete_UserMenu
Lcd_Create_Bottom_Layer

问题应该出在这里,检查执行 Lcd_Delete_UserMenu 时 History_List_MenuPage 的状态

老师,应该不是这的问题,现在主界面的内存还是会增加,其他界面也是,切换都会增加

你这问题主要应该还是内存泄漏的问题,检查一下其他部分的代码吧

内存泄漏,除了对象,样式,还有什么会影响呢

你好兄弟,现在解决了吗,我也遇到这个问题了,我界面切换的时候也会出现内存增加,每次增加0.4kb

对象不能重复创建,样式记得RESET

1 Like

关于样式的注意点,在lvgl的文档中有说明:

由界面1切换到界面2的时候,会进行删除界面1上的对象,如果再次切换到界面1的话,怎样做到对象不重复创建?

对象只创建一次,之后页面的切换灵活使用 LV_OBJ_FLAG_HIDDEN 示例:

lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN);