硬汉嵌入式论坛

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

[emWin] 求助!emWin切换窗口,结束窗口后,内存没释放完,多次切换后导致溢出错误

[复制链接]

2

主题

9

回帖

15

积分

新手上路

积分
15
发表于 2019-7-6 23:01:56 | 显示全部楼层 |阅读模式
本帖最后由 beck 于 2019-7-6 23:03 编辑

情况描述:
    F103VC板子freeRTOS+STemWin5.32。A窗口是window+多个text控件,B、C窗口是window+text+listbox控件,通过按键发送自定义消息,在回调函数里面做窗口切换,
用GUI_EndDialog(pMsg->hWin, 0) 或 WM_DeleteWindow(pMsg->hWin) 结束后再新建窗口,多切换次就内存溢出了。切换前后用GUI_ALLOC_GetNumFreeBytes(),GUI_ALLOC_GetNumUsedBytes(),GUI_ALLOC_GetMaxUsedBytes()三个函数打印出内存情况,
发现问题是上面那两个结束窗口的函数都只释放了一部分内存,不同的界面没释放的大小还不一样,每次都这样,累积多次就被撑爆了。
我有尝试GUI_ALLOC_Free(pMsg->hWin);这个函数,但即使单独使用它,一执行到这里就进hardfault。
在segger官网emwin板块(后面链接中2楼的回复)看到说内存由窗口管理器自动释放,https://forum.segger.com/index.php/Thread/5663-How-to-exit-from-a-GUIBuilder-created-window-and-1-free-memory-2-get-you-display/
freeRTOS的任务也通过串口打印,任务运行及栈都是正常的,就GUI的内存不正常。
各大论坛转了几圈了,也有很多人遇到这问题,但好像没解决方法给出来,困扰好几天了,一直没找到解决方法,请大佬指点一下



回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2019-7-6 23:08:42 | 显示全部楼层
1、你窗口里面有没有用GUI_AllocXXXX之类的函数动态分配内存,如果有的话,要在删除窗口的时候手动释放。
2、不能用一种控件的函数操作另一种控件的句柄,有时候这种操作是当时看不出来问题,后面会死机。

一般来说如果没有动态分配的话,切换是不会死机的,我现在的项目就是十几个页面切换,一点事都没有。
每次切换都是先删除旧页面,再创建新页面。
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2019-7-6 23:36:16 | 显示全部楼层
ihavedone 发表于 2019-7-6 23:08
1、你窗口里面有没有用GUI_AllocXXXX之类的函数动态分配内存,如果有的话,要在删除窗口的时候手动释放。
...

非常感谢你的回复!

1. 我自己的代码部分没有GUI_AllocXXXX这类函数。
2. 各控件间句柄这个没用错,这点可以肯定,因为现在已经裁剪掉很多无关的代码来找问题了。

GUI_EndDialog(pMsg->hWin, 0), WM_DeleteWindow(pMsg->hWin) 这两个应该不算是不同的控件操作吧,
因为我有看到别人分享的ucgui源码里面GUI_EndDialog函数在最后也是调用了WM_DeleteWindow这个函数的。

实在不行就只能重新弄个简单的裸机工程来对比一下问题了,我以前也用裸机做过一个f407的项目,也是这种方法切换窗口的,那个就没出现过这种问题
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2019-7-7 12:51:01 | 显示全部楼层
目前找到出错的点,但个人觉得可能不是错误的根本原因。

在listbox控件初始化中,我用了 LISTBOX_EnableWrapMode(hItem, 1);//启用从结尾滚动到开头

只要注释掉这项,内存释放就是正常的。

即使改成禁用 LISTBOX_EnableWrapMode(hItem, 0);//禁用从结尾滚动到开头
内存释放也不正常。
回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2019-7-8 07:09:15 | 显示全部楼层
上程序,你的程序必然存在其他bug未被找出,正常而言,只有Graph控件才需要单独删除,其他控件会随着父窗口一起被删除掉
代码不规范,亲人两行泪!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 02:53 , Processed in 0.256804 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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