硬汉嵌入式论坛

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

[emWin] WM_SetCreateFlags(WM_CF_MEMDEV)问题

[复制链接]

1

主题

14

回帖

17

积分

新手上路

积分
17
发表于 2019-6-18 11:01:08 | 显示全部楼层 |阅读模式

这个功能查了手册是"重绘时自动使用存储设备"
并且有提到"在大多数情况下,这可避免闪烁,也能提高输出速度"
但我实际使用上来说,开启之后透过WM_HideWindow与WM_ShowWindow来进行页面切换时,画面刷新的很慢。
关闭之后,刷新速度快很多。
确认GUI_SUPPORT_MEMDEV有开启。

是配置上有问题吗?还是我理解错了?

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-6-18 11:14:41 | 显示全部楼层
简单介绍下你的硬件配置信息
回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2019-6-18 11:42:15 | 显示全部楼层
整体配置为
UI内存给128K(GUI_ALLOC_AssignMemory),
外部SDRAM有一层显示缓存。
LCD解析度为800x480
用的是746,内存320K
会配置128K在内部是因为切换很慢,所以把UI用的RAM放在内部比起外部快了约一倍左右,原本切换要0.5秒放在外部要1秒。
现在没有使用WM_SetCreateFlags(WM_CF_MEMDEV)
放在内部与外部都可以很快的切页,似乎比之前还要快,但觉得好像与手册说的不一样,上来请教一下大大。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-6-18 11:53:05 | 显示全部楼层
小銘_qN6g0 发表于 2019-6-18 11:42
整体配置为
UI内存给128K(GUI_ALLOC_AssignMemory),
外部SDRAM有一层显示缓存。

你的程序模板应该有问题,即使是F1操作800*480的RA8875,使用窗口存储设备模式,切换不同窗口界面也是比较顺畅的。

你看我早期测试的速度:

STM32-V5开发板上面测试emWin5.20刷色块,刷控件,刷图片的速度(解除大家对F1,F4
http://www.armbbs.cn/forum.php?m ... 1787&fromuid=58
(出处: 安富莱电子论坛)

回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2019-6-18 13:09:28 | 显示全部楼层
感謝大大的回答!!
上面忘記寫,我的硬件沒有透過RA8875,直接用LTDC打出565的RGB訊號。
這樣會是一個顯示變慢的可能嗎?

另外
開啟WM_SetCreateFlags(WM_CF_MEMDEV)這個功能的狀態下
如果使用了WM_ShowWindow來顯示頁面,是不是會在整個頁面包含頁面中的圖片都重绘,所以切換頁面比較慢?

還是我對WM_SetCreateFlags(WM_CF_MEMDEV)這個功能有誤解呢?
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2019-6-18 14:43:45 | 显示全部楼层
小銘_qN6g0 发表于 2019-6-18 13:09
感謝大大的回答!!
上面忘記寫,我的硬件沒有透過RA8875,直接用LTDC打出565的RGB訊號。
這樣會是一個顯示 ...

开了存储设备后,emWin会先把要显示的内容绘制到内存,然后由内存派送到屏幕。
当界面比较复杂时,会从z序最底层开始,一层层绘制到内存,然后派送到屏幕。

但如果内存比较小,就会将屏幕划分成n份,每次先将其中的一部分一层层绘制到内存,然后将这份内存派送到屏幕之后,绘制下一部分。

之所以开了存储设备会感觉显示变慢了,是因为绘制完一部分后,要再计算下一部分,然后再绘制,一个个来,加大了整个画面刷新的总时间。

而内存比较大时,计算过程都集中在刷屏之前,从刷屏开始到完成的这段时间是很短的。

当关掉存储设备时,会先直接绘制背景到屏幕,然后在屏幕上绘制控件。给人的感觉就是背景一下就刷出来了,然后控件一般又不会占很大面积,接着刷控件也是感觉一瞬间就出来了,就会觉得快。

可以试着在关闭存储设备的情况下,显示一幅大点的图片,然后图片上写字。。。这样就会看到图片先出来,然后才有字。


以上是我个人对于开启存储设备后刷屏的理解。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-6-18 14:56:07 | 显示全部楼层
小銘_qN6g0 发表于 2019-6-18 13:09
感謝大大的回答!!
上面忘記寫,我的硬件沒有透過RA8875,直接用LTDC打出565的RGB訊號。
這樣會是一個顯示 ...

正常情况下,LTDC性能在使用16位带宽的SDRAM时,性能也要比RA8875给力些的。

直接把你两个界面的程序贴出来,我来给你简单测试下,能说明问题两个界面就行,程序不要太大。越小越好。
回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2019-6-18 16:51:35 | 显示全部楼层
这个介面就是显示特别慢的介面
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 100, 800, 425, 0, 0x0, 0 },
  { IMAGE_CreateIndirect, "Setting", ID_IMAGE_0, 25, 45, 233, 225, 0, 0, 0 },
        { IMAGE_CreateIndirect, "Setting_ON", ID_IMAGE_1, 25, 45, 233, 225, 0, 0, 0 },
  { IMAGE_CreateIndirect, "Time", ID_IMAGE_2, 283, 45, 233, 225, 0, 0, 0 },
        { IMAGE_CreateIndirect, "Time_ON", ID_IMAGE_3, 283, 45, 233, 225, 0, 0, 0 },
        { IMAGE_CreateIndirect, "STEP", ID_IMAGE_4, 541, 45, 233, 225, 0, 0, 0 },
        { IMAGE_CreateIndirect, "STEP_ON", ID_IMAGE_5, 541, 45, 233, 225, 0, 0, 0 },       
        { IMAGE_CreateIndirect, "Down", ID_IMAGE_6, 0, 320, 800, 60, 0, 0, 0 },       
  { TEXT_CreateIndirect, "Value", ID_TEXT_0, 53, 127, 165, 50, 0, 0x64, 0 },
  { TEXT_CreateIndirect, "A", ID_TEXT_1, 193, 158, 20, 27, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Time", ID_TEXT_2, 315, 133, 165, 50, 0, 0, 0 },
  { TEXT_CreateIndirect, "Step", ID_TEXT_STEP, 573, 133, 165, 50, 0, 0, 0 },       
        { TEXT_CreateIndirect, "Burn", ID_TEXT_BURN, 367, 20,65, 60, 0, 0, 0  },
        { TEXT_CreateIndirect, "Status", ID_TEXT_STATUS, 625, 20,65, 60, 0, 0, 0  },
        { TEXT_CreateIndirect, "Mod",  ID_TEXT_MOD,116,20, 50, 50, 0, 0, 0 },       
        { TEXT_CreateIndirect, "Work",  ID_TEXT_WORK,620,320, 180, 60, 0, 0, 0 },       
        { TEXT_CreateIndirect, "Model",  ID_TEXT_MODEL,250,320, 370, 60, 0, 0, 0 },
        { TEXT_CreateIndirect, "Jobnumber",  ID_TEXT_JOBNUMBER,20,320, 230, 60, 0, 0, 0 },       
  { BUTTON_CreateIndirect, "UP", ID_BUTTON_0, 47, 45, 180, 85, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "DOWN", ID_BUTTON_1, 47, 165, 180, 85, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "ONOFF", ID_BUTTON_2, 298, 65, 195, 170, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "STEP", ID_BUTTON_STATUS, 556, 65, 195, 170, 0, 0x0, 0 },       
//        { TEXT_CreateIndirect, "TestLink", ID_TEXT_Test_Link, 460,350, 250,30, 0, 0, 0 },       
//         { TEXT_CreateIndirect, "TestLink", ID_TEXT_DEBUG, 200,350, 250,30, 0, 0, 0 },       
  // USER START (Optionally insert additional widgets)
  // USER END
};

因为程序很长,不知道贴这样够不够,主要就是有很多张图,所以解码的时候可能会花一点时间

另一个页面就是纯按钮与下拉选单而已。
但因为我还有很多个页面,所以128K的RAM在页面建立好的时候,只剩下大概11K左右。
开启WM_SetCreateFlags(WM_CF_MEMDEV)的情况下
我有觉得RAM剩余的量好像有点不足。
但关闭WM_SetCreateFlags(WM_CF_MEMDEV)的情况又可以快速的切换....



回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2019-6-18 17:08:02 | 显示全部楼层
ihavedone 发表于 2019-6-18 14:43
开了存储设备后,emWin会先把要显示的内容绘制到内存,然后由内存派送到屏幕。
当界面比较复杂时,会从z ...

这个我的理解有点像,但是我做实验的时候,两个方法都是一起刷出来,也有可能是我看不出来,是需要用大张一点的图吗?还是有什么手法可以更容易实验出来这个现象?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-6-18 17:15:42 | 显示全部楼层
小銘_qN6g0 发表于 2019-6-18 16:51
这个介面就是显示特别慢的介面
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_C ...

仅显示你上面的这些控件,应该无压力才对,你的程序模板应该没有优化好。
回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2019-6-18 17:41:48 | 显示全部楼层
eric2013 发表于 2019-6-18 17:15
仅显示你上面的这些控件,应该无压力才对,你的程序模板应该没有优化好。

好的!! 感谢大大的建议。
我检查一下程式,确认一下模板有没有问题。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 05:00 , Processed in 0.327884 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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