“1、前言
客戶在做 GUI 項(xiàng)目開(kāi)發(fā)時(shí),會(huì)碰到許多顯示相關(guān)的問(wèn)題。
屏幕花屏是比較嚴(yán)重的問(wèn)題,如果產(chǎn)品出現(xiàn)花屏,會(huì)嚴(yán)重影響使用體驗(yàn)。正常的 UI 顯示,包括畫(huà)圖和將幀緩沖傳輸?shù)狡聊粌蓚€(gè)過(guò)程。如果畫(huà)圖過(guò)程出錯(cuò),那幀緩沖的內(nèi)容就不對(duì)了,傳輸?shù)狡聊缓箫@示也不可能正確。如果畫(huà)圖過(guò)程正確,而傳輸過(guò)程出錯(cuò),雖然幀緩沖的內(nèi)容是對(duì)的,而屏幕接收到的數(shù)據(jù)出錯(cuò)了,那屏幕顯示的內(nèi)容自然也是錯(cuò)誤的。因此在定位顯示錯(cuò)亂、花屏等問(wèn)題時(shí),需要先判斷是畫(huà)圖出錯(cuò)還是傳輸過(guò)程出錯(cuò)。
本文會(huì)介紹一種方法,將幀緩沖內(nèi)容導(dǎo)出并保存為圖片,來(lái)判斷幀緩沖內(nèi)容是否正確。由于幀緩沖的內(nèi)容為全部像素的 RGB 數(shù)據(jù),在導(dǎo)出后需要借助其它工具將 RGB 數(shù)據(jù)轉(zhuǎn)換為圖片,方便在 PC 上直接查看。
這里可以使用 python 的 pillow 包,將 RGB 轉(zhuǎn)換為JPG 圖片。而讀取幀緩沖的過(guò)程可以借助 python 的 pyswd 包來(lái)實(shí)現(xiàn)。
2、環(huán)境安裝
本機(jī)環(huán)境:Windows10 64bit 安裝 python 3.9.0 (測(cè)試過(guò) 3.9.6 正常),檢查系統(tǒng)環(huán)境變量,將 python 添加到 Path中。
下載:https://www.python.org/downloads/

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
打開(kāi) powershell,輸入 pip install pyusb-1.2.1-py3-none-any.whl
2.3. 安裝 Pillow
下載:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pil
打開(kāi) 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,打開(kāi) powershell,進(jìn)入 pyswd-1.0.0 目錄,輸入 pythonsetup.py install
3. 將幀緩沖保存為圖片
3.1. 讀取幀緩沖
通過(guò) pyswd,可以創(chuàng)建 stlink 對(duì)象連接到目標(biāo)板,用read_mem 函數(shù)來(lái)讀取目標(biāo)板內(nèi)存。
3.2. 保存圖片
從 Pillow 包導(dǎo)入 Image 類,創(chuàng)建圖片對(duì)象,將 pyswd 讀取的 framebuffer 數(shù)據(jù)填充到 image 對(duì)象中并保存實(shí)現(xiàn)代碼如下,保存為 pyswd_rgb2jpg.py 文件。

4、測(cè)試及小結(jié)
在 L4R9-DK 板上進(jìn)行了測(cè)試
(1) 無(wú) GFXMMU 時(shí),傳給腳本的參數(shù),寬和高為實(shí)際 LCD 的寬和高將 GUI 固件燒錄到開(kāi)發(fā)板后,屏幕正常顯示。在工程 map 文件中,找到 framebuffer 地址。打開(kāi) powershell,執(zhí)行 pyswd_rgb2jpg.py:

(2)開(kāi)啟 GFXMMU 時(shí),framebuffer 對(duì)應(yīng)為虛擬地址,傳給腳本的參數(shù)中,圖像的寬度要用GFXMMU 像素寬度

在完成環(huán)境安裝后,通過(guò)此腳本可方便查看 framebuffer 內(nèi)容。如果出現(xiàn)屏幕花屏的問(wèn)題,可導(dǎo)出 framebuffer 圖片查看。如果畫(huà)圖過(guò)程出錯(cuò),則導(dǎo)出的圖片顯示也是錯(cuò)誤的。反之,如果畫(huà)圖過(guò)程正常,則 framebuffer 內(nèi)容正常,導(dǎo)出的圖片也是正常的,這樣就需要查一下傳輸過(guò)程導(dǎo)致的顯示問(wèn)題。
審核編輯 :李倩
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7348瀏覽量
95012 -
圖片
+關(guān)注
關(guān)注
0文章
203瀏覽量
16615 -
Framebuffer
+關(guān)注
關(guān)注
0文章
8瀏覽量
8444
原文標(biāo)題:工程師筆記|將 framebuffer 保存為圖片來(lái)檢查內(nèi)容正確性
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
儲(chǔ)能EMS控制器(7) — 如何快捷驗(yàn)證儲(chǔ)能柜內(nèi)設(shè)備接入的正確性?
基于開(kāi)源鴻蒙的圖片編輯開(kāi)發(fā)樣例(2)
在Linux ubuntu上使用riscv-formal工具驗(yàn)證蜂鳥(niǎo)E203 SoC的正確性
商品圖片批量上傳接口設(shè)計(jì)與實(shí)現(xiàn)
技術(shù)資訊 I PCB 設(shè)計(jì)完成后進(jìn)行哪些檢查可以有效避免功虧一簣?
【HarmonyOS 5】鴻蒙應(yīng)用實(shí)現(xiàn)發(fā)票掃描、文檔掃描輸出PDF圖片或者表格的功能
##DevEco Studio##如何讓模擬器里有圖片?【圖片下載法】
無(wú)刷雙饋異步電機(jī)潮流建模和收斂性研究
HarmonyOS實(shí)戰(zhàn):一招搞定保存圖片到相冊(cè)
繞組開(kāi)放型永磁同步電機(jī)的建模及應(yīng)用
泰克示波器波形數(shù)據(jù)保存為CSV格式的完整指南
如何正確使用和維護(hù)水下燈具氣密性檢測(cè)儀
電氣設(shè)備交接試驗(yàn)預(yù)防性試驗(yàn)直流電機(jī)做試驗(yàn)項(xiàng)目有哪些
將framebuffer保存為圖片來(lái)檢查內(nèi)容正確性
評(píng)論