您尚未登录。

楼主 # 2025-05-23 00:25:19

skyfy
会员
注册时间: 2024-11-13
已发帖子: 6
积分: 6

D13CBS LVGL+FreeType多次显示不同汉字导致内存增加

如题,在D13CBS上使用最新Luban-Lite SDK 采用LVGL移植了中文输入法,使用Freetype显示汉字有如下问题:
1、显示同一批汉字时,占用内存没有增加
2、显示不同汉字时,占用内存会一直增加

以上内存状态是通过free指令查询heap sys的值。

也曾开启了FreeType配置选项下使用PSRAM SW的内存,但是依然没有解决这个,

请问这个是不是LVGL的FreeType Cache一直在吃内存,且没有释放?

离线

#1 2025-05-23 15:20:52

AICxia
会员
注册时间: 2024-08-12
已发帖子: 42
积分: 162

Re: D13CBS LVGL+FreeType多次显示不同汉字导致内存增加

1.     在LVGL V9中可以在 lv_conf.h中配置字体缓存的个数
p1.png
2.    在LVGL V8中也可以在 lv_conf.h中配置字体缓存的size
p2.png
3.     可以通过调整 freetype的缓存配置参数,来调整最大的缓存占用量,目前只能设置缓存的上限,不能自己去释放缓存空间
4.    目前lvgl自身的运行也会从sys heap中申请内存,freetype也会从 sys heap中申请内存,可以调整LVGL用自身的堆管理(预留一块静态数据块),不用sys heap,为 freetype流出更多内存使用,在 LVGL V9中lv_conf.h添加如下配置,示例中是预留了1MB的空间,可以根据实际需要调整
p3.png

离线

楼主 #2 2025-05-23 19:49:50

skyfy
会员
注册时间: 2024-11-13
已发帖子: 6
积分: 6

Re: D13CBS LVGL+FreeType多次显示不同汉字导致内存增加

修改为使用LVGL 的内部MEM,可以避免系统的heap内存占用增加。
但是目前遇到一个另外一个问题,当多次显示汉字之后,Freetype会报读取字库。换了字库文件依然存在,错误信息如下:

kernel\rt-thread\components\dfs\filesystems\elmfat\dfs_elm.c dfs_elm_read rc:2
kernel\rt-thread\components\dfs\src\dfs_file.c dfs_file_read rc:-5 name:/lvgl_data/fonts/test.ttf
elm
FT_Stream_EnterFrame: invalid read; expected 120 bytes, got 0
[Error] (34.506, +33)    freetype_glyph_create_cb: FT_Load_Glyph error(0x55) lv_freetype_glyph.c:138
[Error] (34.515, +9)     freetype_get_glyph_dsc_cb: glyph lookup failed for unicode = 0x4f2f lv_freetype_glyph.c:104
kernel\rt-thread\components\dfs\filesystems\elmfat\dfs_elm.c dfs_elm_read rc:2
kernel\rt-thread\components\dfs\src\dfs_file.c dfs_file_read rc:-5 name:/lvgl_data/fonts/test.ttf
elm
FT_Stream_EnterFrame: invalid read; expected 84 bytes, got 0
[Error] (34.680, +165)   freetype_image_create_cb: FT_Load_Glyph error(0x55) lv_freetype_image.c:130
[Error] (34.689, +9)     lv_cache_entry_get_data: Asserted at expression: entry != NULL (NULL pointer) lv_cache_entry.c:94
CPU Exception: NO.5
x1: 4013e670    x2: 300762c0    x3: 401f0c78    x4: deadbeef
x5: 4005e2e4    x6: 0000a000    x7: 00018937    x8: 00000000
x9: 3007636c    x10: ffffffff   x11: 0000000a   x12: 00000001
x13: 18710000   x14: 00000000   x15: 00000000   x16: 00000000
x17: 30076164   x18: 0000767d   x19: 000000ca   x20: 0000ffff
x21: 00000003   x22: 00000003   x23: 0000767d   x24: 00000018
x25: 40215ba4   x26: 4023764c   x27: 402376a4   x28: fffffffd
x29: 40058568   x30: 00000000   x31: 00000000
mcause : 0x38000005
mtval  : 0x00000008
mepc   : 0x401500f2
mstatus: 0x80007880

跟踪分析:
看报错信息,是打开FatFS的文件系统读取文件时  dfs_elm_read -> f_read  接口返回2  FR_INT_ERR
字库信息:
目前的字库都是8M以上存在SPI NAND中

我也尝试将LVGL的线程栈空间加到120KB,依然没有改善

这种是不是因为字库文件太大导致还是和内存相关? 麻烦大神帮忙分析下

离线

楼主 #3 2025-05-23 20:57:06

skyfy
会员
注册时间: 2024-11-13
已发帖子: 6
积分: 6

Re: D13CBS LVGL+FreeType多次显示不同汉字导致内存增加

@skyfy
通过继续分析,最终是在f_lseek这个函数中,这个位置返回
if (clst <= 1 || clst >= fs->n_fatent)  ABORT(fs, FR_INT_ERR);

离线

楼主 #4 2025-05-24 15:03:10

skyfy
会员
注册时间: 2024-11-13
已发帖子: 6
积分: 6

Re: D13CBS LVGL+FreeType多次显示不同汉字导致内存增加

@AICxia
能否帮忙分析下,是什么原因会导致读取文件失败

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn