公司项目方案采用了D133CBS芯片+NAND+RGB接口LCD屏,界面用的LVGL9,触摸操作时会偶发性的出现死机问题,串口打印出的错误信息如下:
想请问下各路大神有没有遇到过这个问题?是LVGL分配的内在空间不够吗?我的lv_conf.h配置如下:
#ifndef LV_CONF_H
#define LV_CONF_H
#include <rtconfig.h>
#define LV_USE_LOG 1
#if LV_USE_LOG
/*How important log should be added:
*LV_LOG_LEVEL_TRACE A lot of logs to give detailed information
*LV_LOG_LEVEL_INFO Log important events
*LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem
*LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail
*LV_LOG_LEVEL_USER Only logs added by the user
*LV_LOG_LEVEL_NONE Do not log anything*/
#define LV_LOG_LEVEL LV_LOG_LEVEL_ERROR
/*1: Print the log with 'printf';
*0: User need to register a callback with `lv_log_register_print_cb()`*/
#define LV_LOG_PRINTF 1
/*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/
#define LV_LOG_TRACE_MEM 1
#define LV_LOG_TRACE_TIMER 1
#define LV_LOG_TRACE_INDEV 1
#define LV_LOG_TRACE_DISP_REFR 1
#define LV_LOG_TRACE_EVENT 1
#define LV_LOG_TRACE_OBJ_CREATE 1
#define LV_LOG_TRACE_LAYOUT 1
#define LV_LOG_TRACE_ANIM 1
#endif /*LV_USE_LOG*/
#ifndef LV_COLOR_DEPTH
#define LV_COLOR_DEPTH 32
#endif
#define LV_MEM_SIZE (1024 * 1024U)
#define LV_USE_MEM_MONITOR 0
#define LV_USE_PERF_MONITOR 1
#define LV_USE_SYSMON 1
#define LV_INDEV_DEF_READ_PERIOD 10
#if defined(KERNEL_BAREMETAL)|| defined(KERNEL_FREERTOS)
#define LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB
#define LV_USE_STDLIB_STRING LV_STDLIB_CLIB
#define LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB
#endif
#if defined(KERNEL_BAREMETAL) || defined(KERNEL_FREERTOS)
#define LV_TICK_CUSTOM 1
#define LV_TICK_CUSTOM_INCLUDE <aic_common.h>
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (aic_get_time_ms()) /*Expression evaluating to current system time in ms*/
#define LV_DISP_DEF_REFR_PERIOD 10
#endif
#define LV_USE_FS_POSIX 1
#if LV_USE_FS_POSIX
#define LV_FS_POSIX_LETTER 'L' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/
#define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/
#endif
#if defined(AIC_LVGL_MUSIC_DEMO)
#define LV_USE_DEMO_MUSIC 1
#endif
#if defined(AIC_LVGL_DEMO_BENCHMARK)
#define LV_USE_DEMO_BENCHMARK 1
#undef LV_FONT_MONTSERRAT_24
#define LV_FONT_MONTSERRAT_24 1
#undef LV_USE_DEMO_WIDGETS
#define LV_USE_DEMO_WIDGETS 1
#endif
#if defined(AIC_LVGL_DEMO_WIDGETS)
#define LV_USE_DEMO_WIDGETS 1
#endif
#define LV_USE_DEMO_MUSIC 0
#if LV_USE_DEMO_MUSIC == 1
#define LV_FONT_MONTSERRAT_12 1
#define LV_FONT_MONTSERRAT_16 1
#endif /* LV_USE_DEMO_MUSIC */
/*FreeType library*/
#define LV_USE_FREETYPE 1
#if LV_USE_FREETYPE
/*Let FreeType to use LVGL memory and file porting*/
#define LV_FREETYPE_USE_LVGL_PORT 0
/*Cache count of the glyphs in FreeType. It means the number of glyphs that can be cached.
*The higher the value, the more memory will be used.*/
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT 384
#endif
#define LV_USE_GIF 0
#define LV_CACHE_DEF_SIZE 2 * 1024 * 1024
#define LV_IMAGE_HEADER_CACHE_DEF_CNT 20
#define LV_DEF_REFR_PERIOD 10
#define LV_USE_PARALLEL_DRAW_DEBUG 0
#define LV_DRAW_BUF_STRIDE_ALIGN 8
#define LV_DRAW_BUF_ALIGN CACHE_LINE_SIZE
#define LV_USE_MONKEY 1
#define LV_USE_FILE_EXPLORER 1
#define LV_USE_OBSERVER 1
#define LV_USE_GRID 1
#define LV_USE_CHART 1
#define LV_FONT_MONTSERRAT_12 1
#define LV_FONT_DEFAULT &lv_font_montserrat_12
#endif // LV_CONF_H
跪请大神们指点!
离线
1. 从打印信息看是 freetype申请不到内存了,可以改变一下LVGL的内存配置
2. 可以修改一下luban-lite/packages/artinchip/lvgl-ui/lvgl_v9/lvgl/env_support/rt-thread/lv_rt_thread_conf.h
配置LVGL内存使用LV_STDLIB_BUILTIN方式,给的参考中 LV_MEM_SIZE配置成了2MB,可以根据实际情况去修改 lv_rt_thread_conf.zip
离线
谢谢您的回复,待我按这个修改后测试一下。
离线
前几天同样的报错,我是me设置lvgl任务堆栈(LPKG_LVGL_THREAD_STACK_SIZE )为32768(32KB)弄好的
离线
我的堆栈也是设了32K的,最好是多测一下,这个问题是偶发性的。同样的程序我自己测试很少出现这个问题,一给到测试那边就经常出这个问题
离线
1. LVGL任务堆栈size,LPKG_LVGL_THREAD_STACK_SIZE目前默认配置的为32768(32KB)
2. freetype运行时需要的堆栈的大小和用的字库有关,如果出现堆栈溢出 导致的死机,可以调大这个堆栈的大小
3. 当前出错的freetype加载字形的时候出错,也有可能是申请不到内存了,所以可以尝试调整 LVGL内存配置
离线