Gbind
1
这个地方配置内存大小有点疑惑,现在默认的情况是自动分配多大的呢?
现在问题是界面老是卡死,之前在其他平台是修改LV_MEM_SIZE从128K改成168K即没问题,移植SF32后想尝试修改,修改了第二个32的那个和128的那个,但是发现编译出来的RAM好像没有变化(应该是内存配置没有生效),然后看了底层好像是被硬编码了,但是又没找到其他分配大小的位置,如图
具体是应该怎么修改呢,有点不太懂。
Gbind
2
然后想顺便问一下怎么样实现在PSRAM分配这个内存呢,因为我看现在都是在RAM里面,PSRAM没怎么用到。
salt
3
这个应该是因为生成的config定义缺少CONFIG_前缀导致有一部分的设置不起作用,你看一下你现在使用的sdk版本,最新提交是什么时候的?这个相关的修复是在最近一个星期合并的,所以你可能需要更新一下sdk。
salt
4
使用psram可以参考这个帖子:
你可以尝试使用这样的语句:
#include "mem_section.h"
...
L2_NON_RET_BSS_SECT_BEGIN(lv_work_mem)
L2_NON_RET_BSS_SECT(lv_work_mem, ALIGN(64) static MEM_UNIT work_mem_int[LV_MEM_SIZE / sizeof(MEM_UNIT)]);
L2_NON_RET_BSS_SECT_END
替换lv_mem.c里对work_mem_int的声明,让lv的工作堆被分配到psram上。但是不推荐这么做,因为可能由于psram对非对齐访问的限制导致不能正常工作和因psram速度导致性能瓶颈。
Gbind
5
那请问我应该重新下载哪个版本呢,main还是2.4?
Gbind
7
我刚刚换了一下SDK,然后用vscode这个插件改了一下,编译报这个错误:
换回原来SDK又好了,我用main分支的例程也是这样情况,怎么解决呢,是不是有什么没配置好
Gbind
10
换了新版本SDK修改这个

从32改成128好像编译出来RAM也没有变化,这个LVGL的内存是咋分配的。
然后现在烧录进去也是程序跑着跑着就卡死,以前平台也是类似问题,调了LV_MEM_SIZE就好了,从128K调到168K,RAM增加了20%(其他平台)。
Gbind
11
报这个错误,我按键单击跳转界面卡死,有时候又可以长达十几秒正常,但是最后都会卡死
salt
12
内存分配这个问题是现在v8被强制使用rtthread的分配api了,所以大小设置暂时无效,这个我们后面会修改。rt的系统堆是除去静态分配和保留后剩下的内存,现在应该不是内存不足的问题。能否提供一下关于这个错误的线程的信息。
Gbind
13
针对之前的问题,我们尝试了多种方案,最终通过直接修改 gpu.c 文件、调整 SDK 内存分配大小后问题得以解决,由此确认是内存不足导致。但我不希望后续 SDK 更新时还要反复修改源码,想弄清楚它具体是如何进行内存分配的,以下是相关文档分析。
SDK_BUG_INDEXED8BIT_OOM.md (8.5 KB)
诺狞猫
14
好的,问题已收到,已经内部反馈。非常感谢您对问题的详细分析和解决建议。 
风起
16
我最近看到了这个设置,我觉得这个下面的设置好像就是设置lvgl渲染缓冲区大小的,你要不要试试,按照行数算的