硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3340|回复: 18
收起左侧

[emWin] IMAGE_SetBitmap占用内存不释放

[复制链接]

4

主题

19

回帖

31

积分

新手上路

积分
31
发表于 2018-7-27 18:57:18 | 显示全部楼层 |阅读模式
emwin使用的时候,在WM_TIMER下调用IMAGE_SetBitmap函数,GUI_ALLOC_GetNumFreeBytes读取剩余内存,发现内存不释放,剩余内存一直减小,求解   
        
    case WM_TIMER:
           IMAGE_SetBitmap(alarmSymbolHandle,p);
           i=!i;
          ram = GUI_ALLOC_GetNumFreeBytes();

回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-7-27 18:57:50 | 显示全部楼层
emwin使用的时候,在WM_TIMER下调用IMAGE_SetBitmap函数,GUI_ALLOC_GetNumFreeBytes读取剩余内存,发现内存不释放,剩余内存一直减小,求解            
    case WM_TIMER:
                                IMAGE_SetBitmap(alarmSymbolHandle,p);
                                i=!i;
                                ram = GUI_ALLOC_GetNumFreeBytes();
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-27 19:02:20 | 显示全部楼层
IMAGE是个控件,你删除了才会释放
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-7-27 19:17:45 | 显示全部楼层
eric2013 发表于 2018-7-27 19:02
IMAGE是个控件,你删除了才会释放

WM_DeleteWindow(alarmSymbolHandle);是用这个函数吗,我用这个函数删除之后,内存还是减小
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-27 19:23:28 | 显示全部楼层
Joker. 发表于 2018-7-27 19:17
WM_DeleteWindow(alarmSymbolHandle);是用这个函数吗,我用这个函数删除之后,内存还是减小

可以这样测试,在桌面窗口创建一个,不使用对话框或者控件了

创建前测试下动态内存剩余,创建后侧下,删除后再测下。
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-7-27 19:53:09 | 显示全部楼层
eric2013 发表于 2018-7-27 19:23
可以这样测试,在桌面窗口创建一个,不使用对话框或者控件了

创建前测试下动态内存剩余,创建后侧下, ...

大神还有方法吗,我测试删控件都消耗内存
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-27 20:00:28 | 显示全部楼层
Joker. 发表于 2018-7-27 19:53
大神还有方法吗,我测试删控件都消耗内存

使用了控件后,占用一点内存不释放是正常的,重点是:是否每次创建删除后,一直在减小。
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-7-28 09:27:49 | 显示全部楼层
eric2013 发表于 2018-7-27 20:00
使用了控件后,占用一点内存不释放是正常的,重点是:是否每次创建删除后,一直在减小。

是的,创建减小一点,删除还减小一点,直到减为零卡死
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-28 09:59:57 | 显示全部楼层
Joker. 发表于 2018-7-28 09:27
是的,创建减小一点,删除还减小一点,直到减为零卡死

那就是你的程序模板有问题了,没有移植好。

回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-7-28 10:58:43 | 显示全部楼层
eric2013 发表于 2018-7-28 09:59
那就是你的程序模板有问题了,没有移植好。

那请问有IMAGE_SetBitmap显示位图的相关例程吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-28 11:02:17 | 显示全部楼层
Joker. 发表于 2018-7-28 10:58
那请问有IMAGE_SetBitmap显示位图的相关例程吗

显示位图推荐使用GUI_DrawBitmap ,这个性能好点。

有例子:
http://www.armbbs.cn/forum.ph ... 9834&extra=page%3D1
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-7-28 11:35:37 | 显示全部楼层
eric2013 发表于 2018-7-28 11:02
显示位图推荐使用GUI_DrawBitmap ,这个性能好点。

有例子:

我需要让图片闪烁,要在控件上显示
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-28 11:37:12 | 显示全部楼层
Joker. 发表于 2018-7-28 11:35
我需要让图片闪烁,要在控件上显示

这个也没问题的,实现比较简单,在你的WM_TIMER里面局部无效化更新就好了。
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-7-28 12:56:09 | 显示全部楼层
eric2013 发表于 2018-7-28 11:37
这个也没问题的,实现比较简单,在你的WM_TIMER里面局部无效化更新就好了。

怎么局部无效化更新,局部是指在控件处,更新就是在该处更新显示图片,但是怎么无效化呀
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-7-28 15:54:56 | 显示全部楼层
eric2013 发表于 2018-7-28 11:37
这个也没问题的,实现比较简单,在你的WM_TIMER里面局部无效化更新就好了。

刚才我又看了看,删除控件是不耗内存的,之前调试的 时候断点打错了,但是删除控件那个内存也不能释放
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-30 00:29:07 | 显示全部楼层
Joker. 发表于 2018-7-28 12:56
怎么局部无效化更新,局部是指在控件处,更新就是在该处更新显示图片,但是怎么无效化呀

调用函数WM_InvalidateRect()
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-8-1 14:50:46 | 显示全部楼层
本帖最后由 Joker. 于 2018-8-1 15:00 编辑
eric2013 发表于 2018-7-30 00:29
调用函数WM_InvalidateRect()

调用这个函数后,进入WM_PAINT下重绘,内存还是会减小
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-1 17:57:05 | 显示全部楼层
Joker. 发表于 2018-8-1 14:50
调用这个函数后,进入WM_PAINT下重绘,内存还是会减小

发你使用WM_InvalidateRect()方式的完整代码,我测试下看看。
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-8-1 18:05:00 | 显示全部楼层
eric2013 发表于 2018-8-1 17:57
发你使用WM_InvalidateRect()方式的完整代码,我测试下看看。

我私聊发给你了
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-17 06:36 , Processed in 0.300009 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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