v853 lvgl 使用删除obj来隐藏界面会报错
-
设计思路:使用lv_obj_create(NULL)来创建一个lv_obj_t *obj,在show函数里面使用lv_scr_load_anim()来进行界面切换,在hide函数使用lv_obj_clean(lv_obj_del也试过),使用按键进行切换,会直接卡死退出。
-
@sunchipv 在 v853 lvgl 使用删除obj来隐藏界面会报错 中说:
obj_create(NULL)来创建一个lv_obj_t *obj,在show函数里面使用lv_scr
使用lv_obj_add_flag和lv_obj_clear_flag来进行是可以实现显示和隐藏,但是这样内存消耗会比较厉害
-
你可以用PC上的模拟器进行开发,然后把代码再移植到arm linux下,这样调试的话再PC上用VS就很方便。删除界面有异步async函数,可以考虑用异步的,看看是不是已经del的obj后续还被引用了。
RAM的占用其实只要不是MCU上开发,可以不担心,也就几十K,我的应用二三十个界面,lvgl本身的RAM占用也就几百K。
-
@jeffdev 异步这个我也试过,一样会挂掉。之前根过lv_obj_create代码,然后我使用lv_mem_free来释放之前的申请,但一样不行。ps:我现在是使用LV_OBJ_FLAG_HIDDEN标志位来实现界面切换。这个问题是开发中遇到的,就是想知道为什么会不行?是否有解?
-
@sunchipv 如果是多个界面的话,自己搞个窗口管理的,然后不用隐藏,直接用lv_scr_load或lv_scr_load_anim来加载不同的界面,通过参数可以控制不删除或者删除上一个窗口对象,而不用自己手动删除。这个状况更可能的是内存泄漏,但还有因为字体导致出现的应用挂掉。如果是在板子上运行的,使用core dump,然后看看到底是在哪里挂掉的。
如果你直接在板子上运行,调试就是用gdbserver也不方便,可以用https://github.com/lvgl/lv_port_pc_visual_studio#lvgl-for-windows-visual-studio-port ,修改下这个,把自己的应用做成个静态库,这样不管是交叉编译的还是PC上都很方便,毕竟VS调试太方便了。
-
@jeffdev 在 v853 lvgl 使用删除obj来隐藏界面会报错 中说:
@sunchipv 如果是多个界面的话,自己搞个窗口管理的,然后不用隐藏,直接用lv_scr_load或lv_scr_load_anim来加载不同的界面,通过参数可以控制不删除或者删除上一个窗口对象,而不用自己手动删除。这个状况更可能的是内存泄漏,但还有因为字体导致出现的应用挂掉。如果是在板子上运
好的,我试一下,感谢
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号