硬汉嵌入式论坛

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

[emWin] 屏幕软件旋转优化提速

[复制链接]

24

主题

122

回帖

194

积分

初级会员

积分
194
发表于 2023-8-12 17:08:08 | 显示全部楼层 |阅读模式
现在用的华芯微特的34S做HMI,直驱效果还可以,但也是不支持硬件旋转。以800*480为例,做了个简单的左转90度测试,
实测大概在80ms左右。120M主频,旋转前后缓冲区均设在SDRAM。

无标题.jpg
计算量很小,时间主要花在数据搬运上,且旋转后的地址不连续也不能用memcpy。

想请教一下,是否还有提高速度的可能。目前这个单帧80ms速度肯定是不实用的。

像lvgl,emwin这些gui软件的屏幕旋转估计也不会很快。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-8-12 17:43:45 | 显示全部楼层
使用emWin自带的旋转功能,楼主测试速度多少。
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
 楼主| 发表于 2023-8-12 18:02:38 | 显示全部楼层
没用过emWin,反推答案是:如果emWin快,说明还有优化空间。
之前测过RT1052的PXP,属于硬件旋转倒是比较快。
DMA2D似乎也不提供这种旋转转换。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-8-13 09:53:17 | 显示全部楼层
yxydoctor 发表于 2023-8-12 18:02
没用过emWin,反推答案是:如果emWin快,说明还有优化空间。
之前测过RT1052的PXP,属于硬件旋转倒是比较 ...

MDMA可以实现变相硬件旋转。
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
 楼主| 发表于 2023-8-13 10:30:39 | 显示全部楼层
优化了一下。150MHz主频,800*480,横屏转竖屏
1-90度旋转:64ms
2-180度旋转:29ms
这里DMA用不上,没有这种大跨度的scatter搬运功能,DMA2D也用不上。
如果分辨率控制在400*400以下,时间还是能接受的。更小分辨率的屏基本可以通过配置寄存器硬件实现了。
优化旋转的目的是还是考虑挂lvgl。3缓冲,接口部分,最后一步再统一旋转后写入显存忽略中间过程。
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
 楼主| 发表于 2023-8-14 12:05:17 | 显示全部楼层
把IAR优化等级调到High,软件整屏旋转时间=49.5ms。极限了!
DMA2D数据搬运也是个瓶颈,整屏搬运大概也得45ms。

瓶颈还是SDRAM的带宽,刷屏本身很快,把这些数据准备因素加上去,快不了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-8-14 14:52:28 | 显示全部楼层
yxydoctor 发表于 2023-8-14 12:05
把IAR优化等级调到High,软件整屏旋转时间=49.5ms。极限了!
DMA2D数据搬运也是个瓶颈,整屏搬运大概也得4 ...

800*480分辨率搬运45ms的话,确实太慢了。
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
 楼主| 发表于 2023-8-14 20:12:02 来自手机 | 显示全部楼层
咨询过厂家了,此dma2d非彼dma2d。可以理解为有功能没速度的dma2d。实测如下:直拷565半字16ms,888单字30ms。通过dma2d则基本为30ms。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-8-15 10:40:02 | 显示全部楼层
可以自己汇编写专门的拷贝复制函数。按内存地址连续复制,中间大块数据按 U32 复制。可以大大提高复制速度。例如旋转 90 度后,把之前按行复制改成按列复制即可。
回复

使用道具 举报

5

主题

165

回帖

180

积分

初级会员

积分
180
发表于 2023-8-15 14:35:41 | 显示全部楼层
双层for循环也挺费时间的,可以试试改成while循环,或者更极限一点改成汇编实现
还可以做个测试,用同个函数分别在内部ram和sdram里旋转一个小内存区域然后对比消耗的时间,这样能测出瓶颈是算法本身还是sdram带宽
回复

使用道具 举报

9

主题

103

回帖

130

积分

初级会员

积分
130
发表于 2023-8-16 10:13:42 | 显示全部楼层
我这儿也用到旋转把480*320的横屏逆时针旋转90度改为320*480的竖屏 用的H7 旋转前后都是用的外部16位SDRAM 耗时15ms左右(用了FreeRTOS有高优先级任务打断)。用的H750主频400M.另外版主说用MDMA要如何做呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-8-16 11:19:12 | 显示全部楼层
xy201207 发表于 2023-8-16 10:13
我这儿也用到旋转把480*320的横屏逆时针旋转90度改为320*480的竖屏 用的H7 旋转前后都是用的外部16位SDRAM  ...

这个在CubeH7软件包里面有个MDMA图片旋转例子,找下
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 04:39 , Processed in 0.327956 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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