将framebuffer保存为图片来检查内容正确性

描述

1、前言

客户在做 GUI 项目开发时,会碰到许多显示相关的问题。

屏幕花屏是比较严重的问题,如果产品出现花屏,会严重影响使用体验。正常的 UI 显示,包括画图和将帧缓冲传输到屏幕两个过程。如果画图过程出错,那帧缓冲的内容就不对了,传输到屏幕后显示也不可能正确。如果画图过程正确,而传输过程出错,虽然帧缓冲的内容是对的,而屏幕接收到的数据出错了,那屏幕显示的内容自然也是错误的。因此在定位显示错乱、花屏等问题时,需要先判断是画图出错还是传输过程出错。

本文会介绍一种方法,将帧缓冲内容导出并保存为图片,来判断帧缓冲内容是否正确。由于帧缓冲的内容为全部像素的 RGB 数据,在导出后需要借助其它工具将 RGB 数据转换为图片,方便在 PC 上直接查看。

这里可以使用 python 的 pillow 包,将 RGB 转换为JPG 图片。而读取帧缓冲的过程可以借助 python 的 pyswd 包来实现。

2、环境安装

本机环境:Windows10 64bit 安装 python 3.9.0 (测试过 3.9.6 正常),检查系统环境变量,将 python 添加到 Path中。

下载:https://www.python.org/downloads/

Framebuffer

2.1. 安装 libusb

下载:https://github.com/libusb/libusb/releases

解压 libusb-1.0.24.7z,将 VS2019/MS64/dll/libusb-1.0.dll 拷贝到 python 安装目录,与 python.exe 相同目录

2.2. 安装 pyusb

下载:https://pypi.org/project/pyusb/#files

打开 powershell,输入 pip install pyusb-1.2.1-py3-none-any.whl

2.3. 安装 Pillow

下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pil

打开 powershell,输入 pip install Pillow-8.3.1-cp39-cp39-win_amd64.whl

2.4. 安装 pyswd

下载:https://github.com/cortexm/pyswd/releases/tag/v1.0.0

解压 pyswd-1.0.0.zip,打开 powershell,进入 pyswd-1.0.0 目录,输入 python setup.py install

3. 将帧缓冲保存为图片

3.1. 读取帧缓冲

通过 pyswd,可以创建 stlink 对象连接到目标板,用read_mem 函数来读取目标板内存。

3.2. 保存图片

从 Pillow 包导入 Image 类,创建图片对象,将 pyswd 读取的 framebuffer 数据填充到 image 对象中并保存实现代码如下,保存为 pyswd_rgb2jpg.py 文件。

Framebuffer

4、测试及小结

在 L4R9-DK 板上进行了测试

(1) 无 GFXMMU 时,传给脚本的参数,宽和高为实际 LCD 的宽和高将 GUI 固件烧录到开发板后,屏幕正常显示。在工程 map 文件中,找到 framebuffer 地址。打开 powershell,执行 pyswd_rgb2jpg.py:

Framebuffer

(2)开启 GFXMMU 时,framebuffer 对应为虚拟地址,传给脚本的参数中,图像的宽度要用GFXMMU 像素宽度

Framebuffer

在完成环境安装后,通过此脚本可方便查看 framebuffer 内容。如果出现屏幕花屏的问题,可导出 framebuffer 图片查看。如果画图过程出错,则导出的图片显示也是错误的。反之,如果画图过程正常,则 framebuffer 内容正常,导出的图片也是正常的,这样就需要查一下传输过程导致的显示问题。

审核编辑 :李倩

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分