ucgui 中显示GIF 碰到内存问题

2019-07-20 20:10发布

本人最近在玩ucgui,用的是STM32F407ZG16想显示一张GIF动图来着,结果加上强大的数组之后显示内存不够。具体如图 1;后面查看各种资料 也改了很多地方,Option For Targets那里都将Size改成最大值1M Flash,192K的RAM,如图2;有人说堆栈的问题,我设置的堆栈如图3;还有一个就是定义数组时我都是在数组前面加了const (放在ROM里面)如图4;请问我还要怎么做才能解决问题,求大神指导。



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
FreeRTOS
1楼-- · 2019-07-20 23:58
 精彩回答 2  元偷偷看……
LeBron
2楼-- · 2019-07-21 00:31
 精彩回答 2  元偷偷看……
FreeRTOS
3楼-- · 2019-07-21 05:11
本帖最后由 FreeRTOS 于 2016-9-10 14:19 编辑
LeBron 发表于 2016-9-10 13:31
你指的是GUIConf.h里面的   
#define GUI_ALLOC_SIZE          50000 /* Size of dynamic memory ... Fo ...

不好意思刚才没仔细看你的问题,你这编译报错是因为整个单片机的内存分配不足导致的,所以你必须裁剪掉某部分空间的内存

GUI_ALLOC_SIZE是GUI内存管理方案所占用的内存,看你的定义占用了约50KB,按照你所说的有192KB的SRAM空间,应该不至于导致工程内存不足,所以建议你检查下其他地方看哪里分配了比较大的数组

最后,对于ucgui而言分配的内存是越大越好,但也得兼顾程序其他地方的内存占用情况哦。还有启动文件的堆栈大小是用于MSP的,个人经验一般分配2KB足够了
LeBron
4楼-- · 2019-07-21 08:36
FreeRTOS 发表于 2016-9-10 14:16
不好意思刚才没仔细看你的问题,你这编译报错是因为整个单片机的内存分配不足导致的,所以你必须裁剪掉某 ...

嗯,我就是里面有一个存放GIF动图数据的数组很大,代码几千行。但是我放在1M的Flash里面去了呀,跟RAM应该没关系了吧。
FreeRTOS
5楼-- · 2019-07-21 12:27
static unsigned const char _acImage0[] 应该是被分配到flash里面的,我个人习惯用 static const unsigned char _acImage0[]
我很久没用MDK了,错误信息也忘了是SRAM不够还是FLASH不够,你看下去掉这个图片能不能编译过,如果可以那意味着图片占用的flash太大
LeBron
6楼-- · 2019-07-21 18:16
FreeRTOS 发表于 2016-9-10 15:00
static unsigned const char _acImage0[] 应该是被分配到flash里面的,我个人习惯用 static const unsigned ...

我把这个#define GUI_ALLOC_SIZE          110000 /* Size of dynamic memory ... For WM and memory devices*/   值改大一点    现在编译成功了,定义数组那里加上static的话,其他文件不能用extern 引用了,所以我没加。

一周热门 更多>