硬汉嵌入式论坛

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

[emWin] 补齐emwin一项重大短板,小内存单片机使用分段绘制方法研究——Part 1 单片机刷图块性能测试

[复制链接]

3

主题

17

回帖

26

积分

新手上路

积分
26
发表于 2021-9-2 18:41:48 | 显示全部楼层 |阅读模式
前言:
    当前主流GUI框架如 GUIX、TouchGFX、Embedded Wizard、AWTK等,均提供了分段绘制功能,以支持小内存单片机实现仅使用内部SRAM的情况下达到较为流程的UI效果,而作为使用最为广泛和大家最熟知的emwin对分段绘制的支持不太友好,特别是使用了WM的情况下,未提供分段绘制的接口,对于驱动SPI\I2C接口的液晶屏,只能外挂SRAM芯片作为显存,一方面增加了硬件成本,另一方面对EMC测试产生较大影响。为解决这个问题,本人近段时间作了一些探索,取得了一些成果,准备分成几个部分逐步与大家分享。

今天先进行基础性能测试,目的在于验证使用内部SRAM时GUI性能到底如何,能否满足UI流畅运行的基本条件。
由于手里目前只有407的开发板,这系列的测试都是基于407系列,后续如果有条件可能会在103等系列进行测试。

测试条件:
单片机:STM32F407ZET6 内部SRAM总共192kB 优化等级-o3 运行时间优化
屏幕:320*240TFT 4线SPI 驱动芯片ST7789V
测试参数:主频168M SPI频率42M
由于407内部SRAM不够放下整个屏幕数据,使用256*120大小的部分屏幕进行测试,后面实现分段绘制后可进行全屏绘制。

刷图块理论最大速度:168000000*2(一次操作4字节相当于两个565像素点)/3(数据赋值+循环开销) = 112,000,000 pixel/s;

实测结果:
CPU绘制测试结果(对循环开销进行了优化);

CPU绘制

CPU绘制

刷纯色图块性能为 1.7亿像素每秒。

DMA绘制测试结果:

DMA绘制

DMA绘制

比较意外的是DMA速度反而更慢,只有6800万点。

结论:使用单片机内部SRAM也能够达到比较好的GUI性能,为后续分段绘制的流畅性打下了基础。
未完待续。。。




评分

参与人数 1金币 +20 收起 理由
hqgboy + 20 赞一个!

查看全部评分

回复

使用道具 举报

5

主题

519

回帖

534

积分

金牌会员

积分
534
发表于 2021-9-3 13:30:38 | 显示全部楼层
好文章。继续。。。。
回复

使用道具 举报

3

主题

335

回帖

344

积分

高级会员

积分
344
发表于 2021-9-3 14:00:33 | 显示全部楼层
楼主连应用这么普遍的emwin都没有好好研究啊。emwin的内存设备memdev就是这个作用。
如果在GUI_Init()之前,先执行WM_SetCreateFlags(WM_CF_MEMDEV),整个窗口管理就可以无缝利用memdev。
此时,底层的LCD驱动接口只有drawbitmap接口才会被调用,因为图形都由emwin分片绘制到内存块,驱动只需要把内存块送到LCD即可。
回复

使用道具 举报

3

主题

17

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2021-9-3 17:15:47 | 显示全部楼层
glory 发表于 2021-9-3 14:00
楼主连应用这么普遍的emwin都没有好好研究啊。emwin的内存设备memdev就是这个作用。
如果在GUI_Init()之前 ...

哈哈,你说得很对,但是SPI接口传输速度的限制,需要做一些处理才能保证屏幕显示的流畅性,如果你有过这样的应用,也希望把你的实现方法分享出来看下,有可能我实现的方案和你的方法一样。我觉得应该早有人解决这问题了,只是没发到论坛里来
回复

使用道具 举报

3

主题

335

回帖

344

积分

高级会员

积分
344
发表于 2021-9-3 22:45:25 | 显示全部楼层
楼主你用的DMA更慢,是指“RAM到SPI”的,还是“RAM到RAM”的过程?emWin上层的memdev是分块绘制,不过交给驱动时,它的驱动drawbitmap接口比较难优化,因为它所指向的内存在函数返回后就要归还,所以无法启动DMA传输当前块的同时,函数返回开始渲染下一块。
只有拷贝到一个中转内存才能这么实现,但这样做又多了一次内存拷贝开销,仔细想想是比较头疼的。
在具备全屏显存的条件下是没有这种问题的。
回复

使用道具 举报

3

主题

17

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2021-9-4 13:35:35 | 显示全部楼层
glory 发表于 2021-9-3 22:45
楼主你用的DMA更慢,是指“RAM到SPI”的,还是“RAM到RAM”的过程?emWin上层的memdev是分块绘制,不过交给 ...

是指的刷内部RAM,42M的SPI刷屏只能到30帧左右。你的思路很对,但为了提升UI绘制效率,确实需要以空间换时间。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 01:30 , Processed in 0.186290 second(s), 35 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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