硬汉嵌入式论坛

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

[emWin] FRAMEWIN刷新缓慢

[复制链接]

17

主题

70

回帖

121

积分

初级会员

积分
121
发表于 2018-6-26 10:28:33 | 显示全部楼层 |阅读模式
1、使用FRAMEWIN界面+ListView生成一个界面320*240的界面。可是每次都是先显示中间的客户区中ListView的内容,等五六秒才显示FRAMEWIN的边框。搞得看上去卡的要死。
2、使用FRAMEWIN界面+MutilEdit生成一个界面480*320的界面。可是每次都是先显示FRAMEWIN的边框,等很久才显示MutilEdit的中文文本内容(每次添加文本都要一个个从flash读字库!!!),搞得看上去卡的要死。参考的是:基于RTX+emWin+FlashFS+USB+TCPnet+CAN+Modbus的综合Demo。
不知道怎么优化显示的速度,请各位大哥指点指点。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-26 10:42:08 | 显示全部楼层
你没有移植好,要重新移植,你当前的的界面,F103都可以刷的溜溜的。

回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-26 12:48:16 | 显示全部楼层
使用新唐M480,192Mhz.跑emwin的demo里的HighSpeed,使用外部55ns SRAM 2M,显示是4500000Pixels/Sec。使用内部SRAM,显示是1152000Pixels/Sec。我如果再把总线速度或者什么建立时间往上提,就会出错。至于画点填充等函数,我都是优化过了的。请问现在这个卡的问题,是不是出在总线速度这块啊,我看http://www.armbbs.cn/forum.php?mod=viewthread&tid=1545上的演示视频,速度是我使用内部SRAM的8倍!!!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-27 01:00:49 | 显示全部楼层
1314一路向前 发表于 2018-6-26 12:48
使用新唐M480,192Mhz.跑emwin的demo里的HighSpeed,使用外部55ns SRAM 2M,显示是4500000Pixels/Sec。使用内 ...

估计是模板没有做好,你是在MDK或者IAR 上面测试的话,方便的话,压缩下你的工程并上传,我看下你的实现。
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-27 12:42:12 | 显示全部楼层
eric2013 发表于 2018-6-27 01:00
估计是模板没有做好,你是在MDK或者IAR 上面测试的话,方便的话,压缩下你的工程并上传,我看下你的实现 ...

硬件上是LCD,2块sram挂在一个总线上。TextView这个下面的两个FRAMEWIN刷新很慢。另外主界面下的iconview移动很卡很卡,我直接把它关了。也不知道要怎么把它改的流畅些。麻烦你啦
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-27 12:43:27 | 显示全部楼层
本帖最后由 1314一路向前 于 2018-6-28 11:04 编辑
1314一路向前 发表于 2018-6-27 12:42
硬件上是LCD,2块sram挂在一个总线上。TextView这个下面的两个FRAMEWIN刷新很慢。另外主界面下的iconview ...

附件忘了

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-28 02:10:05 | 显示全部楼层

帮你看代码了,都已经优化了,可以这样测试下,创建一个大的对话框,拖动下,看看是否流畅,如果流畅,说明就没问题的。
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-28 10:50:11 | 显示全部楼层
eric2013 发表于 2018-6-28 02:10
帮你看代码了,都已经优化了,可以这样测试下,创建一个大的对话框,拖动下,看看是否流畅,如果流畅,说 ...

不流畅,十分卡。手指动完了要等半天,而且有时有残影
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-28 11:31:00 | 显示全部楼层
1314一路向前 发表于 2018-6-28 10:50
不流畅,十分卡。手指动完了要等半天,而且有时有残影

我如果把那个设置窗口放在桌面上,而不是背景为文字的那个窗口,就会比较流畅。看来还是重绘这个文字窗口太费时了。进这个文字窗口费时,在这个文字窗口上叠加的窗口创建起来也费时。因为每次重绘都要一个个字的读取FLASH字库。有没有方法可以让这种文字窗口不要在每次更新显示时读取flash?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-28 12:47:47 | 显示全部楼层
1314一路向前 发表于 2018-6-28 11:31
我如果把那个设置窗口放在桌面上,而不是背景为文字的那个窗口,就会比较流畅。看来还是重绘这个文字窗口 ...

你这样测试,不使用你现在的这个例子了,就简单的创建一个对话框,然后拖动,看看是否正常,不要使用你的汉字字体,使用自带的字体。
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-28 17:25:21 | 显示全部楼层
eric2013 发表于 2018-6-28 12:47
你这样测试,不使用你现在的这个例子了,就简单的创建一个对话框,然后拖动,看看是否正常,不要使用你的 ...

嗯,单独在一个白色背景下创建的那个设置窗口。显示速度比较快,基本看不出之前说的那个先显示客户区再显示framewin的外框这个现象。然后拖动也很流畅。看来还是背景中文窗口的重绘影响速度。然而并没有什么办法解决。。。
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-28 22:06:46 | 显示全部楼层
eric2013 发表于 2018-6-28 12:47
你这样测试,不使用你现在的这个例子了,就简单的创建一个对话框,然后拖动,看看是否正常,不要使用你的 ...

还有个问题想请教一下。我想创建一个以window为基础的对话框,然后在某些区域使用存储设备绘制并旋转一些图片。可是不知道应该在哪操作,这个也不属于控件,所以也没法自定义回调函数。
回复

使用道具 举报

11

主题

53

回帖

86

积分

初级会员

积分
86
发表于 2018-6-28 23:00:49 | 显示全部楼层
这个在窗口重绘里绘制旋转好的图片就行吧,可以用定时器定时失效窗口,在重绘里旋转角度绘制
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-29 01:41:39 | 显示全部楼层
1314一路向前 发表于 2018-6-28 17:25
嗯,单独在一个白色背景下创建的那个设置窗口。显示速度比较快,基本看不出之前说的那个先显示客户区再显 ...

这样就说明你的程序模板是没问题的,是你当前的程序设计有问题。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-29 01:42:45 | 显示全部楼层
1314一路向前 发表于 2018-6-28 22:06
还有个问题想请教一下。我想创建一个以window为基础的对话框,然后在某些区域使用存储设备绘制并旋转一些 ...

在窗口回调函数的WM_PAINT消息里面。
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-29 09:30:51 | 显示全部楼层
eric2013 发表于 2018-6-29 01:42
在窗口回调函数的WM_PAINT消息里面。

是在对话框的回调函数中处理WM_PAINT是吗?那我如果在里面重绘我自定义的图案,那还有一些控件怎么重绘。我用什么去重绘控件?
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-29 09:32:17 | 显示全部楼层
奋进love 发表于 2018-6-28 23:00
这个在窗口重绘里绘制旋转好的图片就行吧,可以用定时器定时失效窗口,在重绘里旋转角度绘制

使用了对话框,是在对话框的回调函数中处理WM_PAINT是吗?那我如果在里面重绘我自定义的图案,那还有一些对话框中的控件怎么重绘。我用什么去重绘控件,在哪里重绘?
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-29 20:45:20 | 显示全部楼层
本帖最后由 1314一路向前 于 2018-6-29 20:47 编辑
eric2013 发表于 2018-6-29 01:42
在窗口回调函数的WM_PAINT消息里面。

好了,我明白了这个问题啦。在对话框回调函数中的WM_PAINT中只需用户重绘自定义的东西,控件的重绘不用管。
现在又遇到一个新问题,我想将一个带透明度的位图加载到一个不带透明度的背景图上。分别申请了带透明效果的内存设备和不带透明的内存设备。但是带透明的内存设备的透明区域叠加在不带透明的设备上后,发现是黑色的。也就是说透明区域一直都是黑色的,没法实现叠加效果。和V6的万年历历程比较了一番,发现区别在于我使用的是带透明度的图,而万年历使用的是画多边形的方式,所以它没有透明区域需要叠加。麻烦指点一下思路,谢谢
  1. static void _cbDialog(WM_MESSAGE * pMsg) {
  2.   WM_HWIN hItem;
  3.   int     NCode;
  4.   int     Id;
  5.   // USER START (Optionally insert additional variables)
  6.   int     ID;
  7.   // USER END

  8.   switch (pMsg->MsgId) {
  9.   case WM_INIT_DIALOG:
  10.     //
  11.     // Initialization of 'App_S'
  12.     //
  13.     hItem = pMsg->hWin;
  14.     WINDOW_SetBkColor(hItem, GUI_WHITE);
  15.     //
  16.     // Initialization of 'Button'
  17.     //
  18.     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
  19.     BUTTON_SetText(hItem, "EXIT");
  20.     //
  21.     // Initialization of 'Button'
  22.     //
  23.     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
  24.     BUTTON_SetFont(hItem, GUI_FONT_13_1);
  25.     BUTTON_SetText(hItem, "Menu");
  26.     // USER START (Optionally insert additional code for further widget initialization)
  27.         
  28.         hMem_PICBK = GUI_MEMDEV_CreateFixed(0,
  29.                                                                            0,
  30.                                                                            bmLock.XSize*2,
  31.                                                                            bmLock.XSize*2,
  32.                                                                            GUI_MEMDEV_NOTRANS,
  33.                                                                            GUI_MEMDEV_APILIST_16,
  34.                                                                            GUICC_M565);
  35.         hMem_PIC = GUI_MEMDEV_CreateFixed(0,
  36.                                                                            0,
  37.                                                                            bmLock.XSize,
  38.                                                                            bmLock.YSize,
  39.                                                                            GUI_MEMDEV_HASTRANS,
  40.                                                                            GUI_MEMDEV_APILIST_32,
  41.                                                                            GUICC_M8888);                                                   
  42.         GUI_MEMDEV_Select(hMem_PIC);
  43.     GUI_DrawBitmap(&bmLock, 0, 0);
  44.     GUI_MEMDEV_Select(0);
  45.         
  46.         GUI_MEMDEV_Select(hMem_PICBK);
  47.     GUI_SetBkColor(GUI_GREEN);
  48.     GUI_Clear();
  49.         GUI_MEMDEV_Write(hMem_PIC);
  50.     GUI_MEMDEV_Select(0);
  51.         
  52.         // USER END
  53.     break;
  54.   case WM_NOTIFY_PARENT:
  55.     Id    = WM_GetId(pMsg->hWinSrc);
  56.     NCode = pMsg->Data.v;
  57.     switch(Id) {
  58.     case ID_BUTTON_0: // Notifications sent by 'Button'
  59.       switch(NCode) {
  60.       case WM_NOTIFICATION_CLICKED:
  61.         // USER START (Optionally insert code for reacting on notification message)
  62.         // USER END
  63.         break;
  64.       case WM_NOTIFICATION_RELEASED:
  65.         // USER START (Optionally insert code for reacting on notification message)
  66.         GUI_EndDialog(pMsg->hWin,0);
  67.                 // USER END
  68.         break;
  69.       // USER START (Optionally insert additional code for further notification handling)
  70.       // USER END
  71.       }
  72.       break;
  73.     case ID_BUTTON_1: // Notifications sent by 'Button'
  74.       switch(NCode) {
  75.       case WM_NOTIFICATION_CLICKED:
  76.         // USER START (Optionally insert code for reacting on notification message)
  77.         // USER END
  78.         break;
  79.       case WM_NOTIFICATION_RELEASED:
  80.         // USER START (Optionally insert code for reacting on notification message)
  81.         // USER END
  82.         break;
  83.       // USER START (Optionally insert additional code for further notification handling)
  84.       // USER END
  85.       }
  86.       break;
  87.     // USER START (Optionally insert additional code for further Ids)
  88.     // USER END
  89.     }
  90.     break;
  91.   // USER START (Optionally insert additional message handling)
  92.     case WM_PAINT:
  93.         GUI_MEMDEV_WriteAt(hMem_PICBK,100,100);
  94.         break;
  95.         // USER END
  96.   default:
  97.     WM_DefaultProc(pMsg);
  98.     break;
  99.   }
  100. }
复制代码
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-29 21:20:36 | 显示全部楼层
1314一路向前 发表于 2018-6-29 20:45
好了,我明白了这个问题啦。在对话框回调函数中的WM_PAINT中只需用户重绘自定义的东西,控件的重绘不用管 ...

感觉和V6 v2.0手册的15章实际效果一样,黑边
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-30 01:29:23 | 显示全部楼层
1314一路向前 发表于 2018-6-29 21:20
感觉和V6 v2.0手册的15章实际效果一样,黑边

带透明效果的图片使用存储设备绘制,现象就是这样的,这个是由GUI_SetColor所设置的前景色决定的。默认前景色是黑色。你设置成其它颜色,然后调用CUI_Clear就可以看到其它效果了。
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-30 09:59:43 | 显示全部楼层
eric2013 发表于 2018-6-30 01:29
带都没效果的图片使用存储设备绘制,消息就是这样的,这个是由GUI_SetColor所设置的前景色决定的。默认前 ...

这个我知道,但是这样只能设置单一颜色,无法实现实际上的透明效果。因为我的背景图不是纯色的,所以无法通过GUI_SetColor来设置透明区域的颜色,达到透明背景的效果。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-30 10:10:46 | 显示全部楼层
1314一路向前 发表于 2018-6-30 09:59
这个我知道,但是这样只能设置单一颜色,无法实现实际上的透明效果。因为我的背景图不是纯色的,所以无法 ...

这种情况没法用存储设备了。把透明图标存储到内部flash,以位图存储,直接绘制吧,
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-6-30 10:29:44 | 显示全部楼层
eric2013 发表于 2018-6-30 10:10
这种情况没法用存储设备了。把透明图标存储到内部flash,以位图存储,直接绘制吧,

那我怎么旋转这个透明位图。。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-30 10:31:48 | 显示全部楼层
1314一路向前 发表于 2018-6-30 10:29
那我怎么旋转这个透明位图。。。

参考这个例子搞:http://www.armbbs.cn/forum.php?m ... amp;highlight=meter
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 21:29 , Processed in 0.354103 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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