OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5331|回复: 6

ucgui 中显示GIF 碰到内存问题

[复制链接]

10

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2016-8-25
在线时间
62 小时
发表于 2016-9-10 11:48:27 | 显示全部楼层 |阅读模式
本人最近在玩ucgui,用的是STM32F407ZG16想显示一张GIF动图来着,结果加上强大的数组之后显示内存不够。具体如图 1;后面查看各种资料 也改了很多地方,Option For Targets那里都将Size改成最大值1M Flash,192K的RAM,如图2;有人说堆栈的问题,我设置的堆栈如图3;还有一个就是定义数组时我都是在数组前面加了const (放在ROM里面)如图4;请问我还要怎么做才能解决问题,求大神指导。



1

1

2

2

3

3

4

4
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12544
金钱
12544
注册时间
2015-11-5
在线时间
2147 小时
发表于 2016-9-10 12:59:37 | 显示全部楼层
你改错了,启动文件的Stack_Size设为0x800一般足够用了,你要改的是ucgui自身那套内存管理的内存大小,跟emwin一样的改法
回复 支持 反对

使用道具 举报

10

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2016-8-25
在线时间
62 小时
 楼主| 发表于 2016-9-10 13:31:42 | 显示全部楼层
FreeRTOS 发表于 2016-9-10 12:59
你改错了,启动文件的Stack_Size设为0x800一般足够用了,你要改的是ucgui自身那套内存管理的内存大小,跟em ...

你指的是GUIConf.h里面的   
#define GUI_ALLOC_SIZE          50000 /* Size of dynamic memory ... For WM and memory devices*/  改这个50000数值?
回复 支持 反对

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12544
金钱
12544
注册时间
2015-11-5
在线时间
2147 小时
发表于 2016-9-10 14:16:22 | 显示全部楼层
本帖最后由 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足够了
拿来长岛冰茶换我半晚安睡
回复 支持 反对

使用道具 举报

10

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2016-8-25
在线时间
62 小时
 楼主| 发表于 2016-9-10 14:29:10 | 显示全部楼层
FreeRTOS 发表于 2016-9-10 14:16
不好意思刚才没仔细看你的问题,你这编译报错是因为整个单片机的内存分配不足导致的,所以你必须裁剪掉某 ...

嗯,我就是里面有一个存放GIF动图数据的数组很大,代码几千行。但是我放在1M的Flash里面去了呀,跟RAM应该没关系了吧。
回复 支持 反对

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12544
金钱
12544
注册时间
2015-11-5
在线时间
2147 小时
发表于 2016-9-10 15:00:53 | 显示全部楼层
static unsigned const char _acImage0[] 应该是被分配到flash里面的,我个人习惯用 static const unsigned char _acImage0[]
我很久没用MDK了,错误信息也忘了是SRAM不够还是FLASH不够,你看下去掉这个图片能不能编译过,如果可以那意味着图片占用的flash太大
拿来长岛冰茶换我半晚安睡
回复 支持 反对

使用道具 举报

10

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2016-8-25
在线时间
62 小时
 楼主| 发表于 2016-9-10 15:15:21 | 显示全部楼层
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 引用了,所以我没加。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 05:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表