硬汉嵌入式论坛

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

[emWin] 网友们反馈单独删除Graph控件内存也是一点点的减小,特此做个测试

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2018-8-10 10:02:54 | 显示全部楼层 |阅读模式
测试
创建1个阻塞式对话框,带Graph控件,点击按钮删除后,再重新创建,继续执行。
测试几十次,没问题:
QQ截图20180810100107.png

界面:
QQ截图20180810100219.png



代码:
  1. #include "DIALOG.h"
  2. #include "stdlib.h"
  3. #include "stdio.h"


  4. /*
  5. *********************************************************************************************************
  6. *                                             变量
  7. *********************************************************************************************************
  8. */
  9. static GRAPH_SCALE_Handle hScaleV;     
  10. static GRAPH_DATA_Handle  ahData;

  11. /*
  12. *********************************************************************************************************
  13. *                                             宏定义
  14. *********************************************************************************************************
  15. */
  16. #define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
  17. #define ID_GRAPH_0    (GUI_ID_USER + 0x01)
  18. #define ID_BUTTON_0   (GUI_ID_USER + 0x02)


  19. /*
  20. *********************************************************************************************************
  21. *                               GUI_WIDGET_CREATE_INFO类型数组
  22. *********************************************************************************************************
  23. */
  24. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
  25. {
  26.         { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 800, 480, 0, 0x64, 0 },
  27.         { GRAPH_CreateIndirect, "Graph", ID_GRAPH_0, 10, 10, 400, 240, 0, 0x0, 0 },
  28.         { BUTTON_CreateIndirect, "Setting", ID_BUTTON_0, 100, 300, 80, 30, 0, 0x0, 0 },
  29. };

  30. /*
  31. *********************************************************************************************************
  32. *        函 数 名: _cbDialog
  33. *        功能说明: 对话框回调函数               
  34. *        形    参: pMsg  回调参数
  35. *        返 回 值: 无
  36. *********************************************************************************************************
  37. */
  38. static void _cbDialog(WM_MESSAGE * pMsg)
  39. {
  40.         WM_HWIN hItem;
  41.         int     NCode;
  42.         int     Id;

  43.         switch (pMsg->MsgId)
  44.         {
  45.                 case WM_INIT_DIALOG:
  46.                         //
  47.                         // 初始化
  48.                         //
  49.                         hItem = pMsg->hWin;
  50.                         FRAMEWIN_SetFont(hItem, GUI_FONT_32B_ASCII);
  51.                         FRAMEWIN_SetText(hItem, "armfly");
  52.                         FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);

  53.                         //
  54.                         // 初始化Graph控件
  55.                         //
  56.                         hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);

  57.                         /* 创建数据对象 *******************************************************/
  58.                         ahData = GRAPH_DATA_YT_Create(GUI_GREEN, 400, 0, 0);

  59.                         /* 数据对象添加到图形控件 */
  60.                         GRAPH_AttachData(hItem, ahData);

  61.                         /* 设置Y轴方向的栅格间距 */
  62.                         GRAPH_SetGridDistY(hItem, 20);

  63.                         /* 固定X轴方向的栅格 */
  64.                         GRAPH_SetGridFixedX(hItem, 1);

  65.                         /* 设置栅格可见 */
  66.                         GRAPH_SetGridVis(hItem, 1);

  67.                         /* 创建刻度对象  ***************************************************/
  68.                         hScaleV = GRAPH_SCALE_Create(20, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 20);

  69.                         /* 将垂直刻度对象添加到图形控件 */
  70.                         GRAPH_AttachScale(hItem, hScaleV);

  71.                         /* 用于设置比例刻度的因子 */
  72.                         GRAPH_SCALE_SetFactor(hScaleV, 0.5);

  73.                         /* 设置标签字体颜色 */
  74.                         GRAPH_SCALE_SetTextColor(hScaleV, GUI_RED);

  75.                         /* 设置上下左右边界的大小 */
  76.                         GRAPH_SetBorder(hItem, 20, 10, 10, 10);
  77.                         
  78.                         /*
  79.                          * 创建定时器,其功能是经过指定周期后,向指定窗口发送消息。
  80.                          * 该定时器与指定窗口相关联。
  81.                          */
  82.                         WM_CreateTimer(WM_GetClientWindow(pMsg->hWin),   /* 接受信息的窗口的句柄 */
  83.                                                    0,                  /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
  84.                                                    100,          /* 周期,此周期过后指定窗口应收到消息*/
  85.                                                    0);                 /* 留待将来使用,应为0 */        
  86.                         break;
  87.                         
  88.                  case WM_NOTIFY_PARENT:
  89.                         Id    = WM_GetId(pMsg->hWinSrc);
  90.                         NCode = pMsg->Data.v;
  91.                         switch(Id)
  92.                         {
  93.                                 case ID_BUTTON_0:
  94.                                         switch(NCode)
  95.                                         {
  96.                                                 case WM_NOTIFICATION_RELEASED:
  97.                                                         WM_DeleteWindow(WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0));
  98.                                                         GUI_EndDialog(pMsg->hWin,0);
  99.                                                         break;
  100.                         
  101.                                         }
  102.                                         break;
  103.                         }
  104.                         break;
  105.                         
  106.                         /* 定时更新 */
  107.                 case WM_TIMER:  
  108.                         GRAPH_DATA_YT_AddValue(ahData, rand()%100);
  109.                         WM_RestartTimer(pMsg->Data.v, 100);
  110.                         break;
  111.                         
  112.                 default:
  113.                         WM_DefaultProc(pMsg);
  114.                         break;
  115.         }
  116. }

  117. /*
  118. *********************************************************************************************************
  119. *        函 数 名: MainTask
  120. *        功能说明: GUI主函数
  121. *        形    参: 无
  122. *        返 回 值: 无
  123. *********************************************************************************************************
  124. */
  125. void MainTask(void)
  126. {
  127.         
  128.         /* 初始化 */
  129.         GUI_Init();
  130.         
  131.         /*
  132.          关于多缓冲和窗口内存设备的设置说明
  133.            1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
  134.                   WM_MULTIBUF_Enable(1);
  135.            2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
  136.            3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
  137.                   STM32F429BIT6 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
  138.                   感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
  139.            4. 所有emWin例子默认是开启三缓冲。
  140.         */
  141.         WM_MULTIBUF_Enable(1);
  142.         
  143.         /*
  144.        触摸校准函数默认是注释掉的,电阻屏需要校准,电容屏无需校准。如果用户需要校准电阻屏的话,执行
  145.            此函数即可,会将触摸校准参数保存到EEPROM里面,以后系统上电会自动从EEPROM里面加载。
  146.         */
  147.     //TOUCH_Calibration();
  148.                
  149.         while(1)
  150.         {
  151.                 GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  152.                 printf("GUI_ALLOC_GetNumFreeBytes() = %d\r\n", GUI_ALLOC_GetNumFreeBytes());
  153.                 GUI_Delay(50);
  154.         }
  155. }

  156. /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
复制代码
回复

使用道具 举报

20

主题

110

回帖

170

积分

初级会员

积分
170
发表于 2018-8-10 14:19:25 | 显示全部楼层
无解,还是在减少。会不会是我在另一个界面的返回到波形的按钮里用了
WM_CreateTimer(WM_GetClientWindow(CreateWaveFormWindow()), 0, 25, 0);造成的??这样可以创建界面和定时器。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2018-8-10 14:27:50 | 显示全部楼层
飛饵 发表于 2018-8-10 14:19
无解,还是在减少。会不会是我在另一个界面的返回到波形的按钮里用了
WM_CreateTimer(WM_GetClientWindow( ...

把你的应用先全部注释掉,测试我的,如果不行,说明你的模板有问题。
回复

使用道具 举报

20

主题

110

回帖

170

积分

初级会员

积分
170
发表于 2018-8-10 15:07:41 | 显示全部楼层
eric2013 发表于 2018-8-10 14:27
把你的应用先全部注释掉,测试我的,如果不行,说明你的模板有问题。

嗯,测试你的还是在减少。怎么解决?换新版的库吗?目前用5.22的库
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2018-8-10 15:11:23 | 显示全部楼层
飛饵 发表于 2018-8-10 15:07
嗯,测试你的还是在减少。怎么解决?换新版的库吗?目前用5.22的库

基本可以确定是你的工程有问题了。

使用5.32就行,我一直再用,替换lib和头文件即可,然后全编译工程
http://www.armbbs.cn/forum.php?m ... &highlight=5.32

如果还有问题,那就是你的移植有问题了。
回复

使用道具 举报

20

主题

110

回帖

170

积分

初级会员

积分
170
发表于 2018-8-10 23:01:12 | 显示全部楼层
eric2013 发表于 2018-8-10 15:11
基本可以确定是你的工程有问题了。

使用5.32就行,我一直再用,替换lib和头文件即可,然后全编译工程
...

谢啦,真的是库的问题,用新版就不会减少了。不过用了新版库LCD方向和触摸屏方向不能自动匹配,搞了半天只能手动调正来。以后换屏幕方向还得慢慢调了,真是问题不断
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2018-8-11 01:18:27 | 显示全部楼层
飛饵 发表于 2018-8-10 23:01
谢啦,真的是库的问题,用新版就不会减少了。不过用了新版库LCD方向和触摸屏方向不能自动匹配,搞了半天 ...

校准一次就好了,后面推荐搞个校准,简单省事些。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-1 07:23 , Processed in 0.322169 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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