硬汉嵌入式论坛

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

[emWin] 请教大神:STM32F429_emwin 显示PNG图片速度有点慢,如何决解?

[复制链接]

5

主题

12

回帖

27

积分

新手上路

积分
27
发表于 2018-12-24 10:49:48 | 显示全部楼层 |阅读模式
本人使用的是F429的开发板,800*480的显示屏,显示一张PNG图片。测试的刷新刷新速度是:50613000pixels/s ,但是显示速度有点慢,我想请教一下如何可以提高显示速度。希望大神指导一下。谢谢!



显示程序

显示程序
QQ截图20181224104841.png

QQ短视频20181224100659.mp4

821.58 KB, 下载次数: 46

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-24 11:00:54 | 显示全部楼层
将图片绘制到存储设备里面,方可大大加速。

回复

使用道具 举报

5

主题

12

回帖

27

积分

新手上路

积分
27
 楼主| 发表于 2018-12-24 11:08:17 | 显示全部楼层
eric2013 发表于 2018-12-24 11:00
将图片绘制到存储设备里面,方可大大加速。

你这里说的内存设备是指SD卡或者外部flash吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-24 11:09:35 | 显示全部楼层
回复

使用道具 举报

5

主题

12

回帖

27

积分

新手上路

积分
27
 楼主| 发表于 2018-12-24 11:24:47 | 显示全部楼层
eric2013 发表于 2018-12-24 11:09
这个帖子有示例

http://www.armbbs.cn/forum.php?mod=viewthread&tid=88879&highlight=%CD%B8%C3%F7

void Interface_2(void)
{
        GUI_HMEM hMemPNG;
        hMemPNG = GUI_MEMDEV_CreateFixed(0, 0, 800, 480, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);

        GUI_MEMDEV_Select(hMemPNG);
        GUI_SetBkColor(GUI_BLACK);
  GUI_Clear();
       
         GUI_PNG_Draw(data, sizeof(data), 0, 0);
   GUI_MEMDEV_Select(0);
        
   GUI_MEMDEV_WriteAt(hMemPNG, 0, 0);
       
}
修改后的显示程序,
运行后,运行到GUI_PNG_Draw()这条函数后就卡死了。卡到哪里不显示。请教一下我是哪里出了问题了吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-24 11:29:22 | 显示全部楼层
hjc 发表于 2018-12-24 11:24
void Interface_2(void)
{
        GUI_HMEM hMemPNG;

如果是我们V6板子,直接使用我们的程序模板即可,任意下载一个emWin例子

如果不是我们的板子,看你的GUIConf.c定义的emWin动态内存大小,足够大,分配个几MB空间。
回复

使用道具 举报

5

主题

12

回帖

27

积分

新手上路

积分
27
 楼主| 发表于 2018-12-24 11:46:57 | 显示全部楼层
eric2013 发表于 2018-12-24 11:29
如果是我们V6板子,直接使用我们的程序模板即可,任意下载一个emWin例子

如果不是我们的板子,看你的G ...

hMemPNG = GUI_MEMDEV_CreateFixed(0, 0, 800, 480, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);

这条函数分配的尺寸大了,所以没显示出来。
void Interface_2(void)
{
        GUI_HMEM hMemPNG;
        hMemPNG = GUI_MEMDEV_CreateFixed(0, 0, 595, 333, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);

        GUI_MEMDEV_Select(hMemPNG);
        GUI_SetBkColor(GUI_BLACK);
  GUI_Clear();
       
         GUI_PNG_Draw(data, sizeof(data), 0, 0);
   GUI_MEMDEV_Select(0);
        
   GUI_MEMDEV_WriteAt(hMemPNG, 110, 80);
       
}
修改后,可以显示。速度提升了一点。但是还是有点慢。这个之外还有提速的方法吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-24 11:50:00 | 显示全部楼层
hjc 发表于 2018-12-24 11:46
hMemPNG = GUI_MEMDEV_CreateFixed(0, 0, 800, 480, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_ ...

变量GUI_HMEM hMemPNG;设置为全局变量。

绘制到存储设备后,以后不管那个函数使用,仅需调用即可:
GUI_MEMDEV_WriteAt(hMemPNG, 110, 80);

无需重复的创建。
回复

使用道具 举报

5

主题

12

回帖

27

积分

新手上路

积分
27
 楼主| 发表于 2018-12-25 11:27:08 | 显示全部楼层
eric2013 发表于 2018-12-24 11:50
变量GUI_HMEM hMemPNG;设置为全局变量。

绘制到存储设备后,以后不管那个函数使用,仅需调用即可:

我想请教一下,还有办法再加快一下显示速度吗?目前的速度还是有点慢。
我的刷新像素的速度是50613000pixels/s,怎么换算都比我目前的速度快。
我查看了一些资料,DMA2D和我将页面设置成单页然后提高一下频率可以加快,这是可行的吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-25 11:31:45 | 显示全部楼层
hjc 发表于 2018-12-25 11:27
我想请教一下,还有办法再加快一下显示速度吗?目前的速度还是有点慢。
我的刷新像素的速度是50613000pix ...

你这跑分是16位带宽SDRAM的性能,速度就这样了。

另外这个跑分仅仅是DAM2D刷色块的速度,不能代表刷图片。

存储设备刷图片是从一个SDRAM区到另一个SDRAM区,所以速度稍慢些。
回复

使用道具 举报

5

主题

12

回帖

27

积分

新手上路

积分
27
 楼主| 发表于 2018-12-25 11:43:34 | 显示全部楼层
eric2013 发表于 2018-12-25 11:31
你这跑分是16位带宽SDRAM的性能,速度就这样了。

另外这个跑分仅仅是DAM2D刷色块的速度,不能代表刷图 ...

void Interface_2(void)
{
        GUI_HMEM hMemPNG;
        hMemPNG = GUI_MEMDEV_CreateFixed(0, 0, 595, 333, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);

        GUI_MEMDEV_Select(hMemPNG);
        GUI_SetBkColor(GUI_BLACK);
  GUI_Clear();
        
         GUI_PNG_Draw(data, sizeof(data), 0, 0);
   GUI_MEMDEV_Select(0);
        
   GUI_MEMDEV_WriteAt(hMemPNG, 110, 80);
        
}
你的意思是我用上这段代码,应该是最快的。
程序上有其他地方可以优化的吗?
DMA2D既然能传输纯色块,能不能传图片信息啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-25 11:52:35 | 显示全部楼层
hjc 发表于 2018-12-25 11:43
void Interface_2(void)
{
        GUI_HMEM hMemPNG;

搞到存储设备后,仅需调用 GUI_MEMDEV_WriteAt(hMemPNG, 110, 80);即可,无需重复创建!

以我们V6开发板为例,使用的32位带宽SDRAM,绘制800*480分辨率图片,需要15ms,底层已经做个DMA2D的加速。

ps:这个帖子就帮你这么多吧,结帖。
回复

使用道具 举报

5

主题

12

回帖

27

积分

新手上路

积分
27
 楼主| 发表于 2018-12-25 13:03:44 | 显示全部楼层
eric2013 发表于 2018-12-25 11:52
搞到存储设备后,仅需调用 GUI_MEMDEV_WriteAt(hMemPNG, 110, 80);即可,无需重复创建!

以我们V6开发 ...

好的,非常感谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 00:35 , Processed in 0.310016 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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