“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/
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 目錄,輸入 pythonsetup.py install
3. 將幀緩沖保存為圖片
3.1. 讀取幀緩沖
通過 pyswd,可以創建 stlink 對象連接到目標板,用read_mem 函數來讀取目標板內存。
3.2. 保存圖片
從 Pillow 包導入 Image 類,創建圖片對象,將 pyswd 讀取的 framebuffer 數據填充到 image 對象中并保存實現代碼如下,保存為 pyswd_rgb2jpg.py 文件。
4、測試及小結
在 L4R9-DK 板上進行了測試
(1) 無 GFXMMU 時,傳給腳本的參數,寬和高為實際 LCD 的寬和高將 GUI 固件燒錄到開發板后,屏幕正常顯示。在工程 map 文件中,找到 framebuffer 地址。打開 powershell,執行 pyswd_rgb2jpg.py:
(2)開啟 GFXMMU 時,framebuffer 對應為虛擬地址,傳給腳本的參數中,圖像的寬度要用GFXMMU 像素寬度
在完成環境安裝后,通過此腳本可方便查看 framebuffer 內容。如果出現屏幕花屏的問題,可導出 framebuffer 圖片查看。如果畫圖過程出錯,則導出的圖片顯示也是錯誤的。反之,如果畫圖過程正常,則 framebuffer 內容正常,導出的圖片也是正常的,這樣就需要查一下傳輸過程導致的顯示問題。
審核編輯 :李倩
-
數據
+關注
關注
8文章
7145瀏覽量
89581 -
圖片
+關注
關注
0文章
203瀏覽量
15968 -
Framebuffer
+關注
關注
0文章
8瀏覽量
8086
原文標題:工程師筆記|將 framebuffer 保存為圖片來檢查內容正確性
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
DAC0832的典型接法幾點正確性的疑問求解
根據ADS1292R Data sheet組了一個前端電路,請問要如何測試電路的正確性?
ADS1278EVM-PDK連續采集方式保存數據時,能否保存為單個文件?
ADCPROADS1278EVM-PDK用ADCPro在連續采集模式下能否保存為1個文件?
嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-LCD顯示圖片編程示例之介紹framebuffer
飛凌嵌入式ElfBoard ELF 1板卡-LCD顯示圖片編程示例之介紹framebuffer
ADS5282如何通過其他方式驗證寄存器寫入的正確性?
如何評估AIGC內容的質量和效果
使用CY521 EVAL配置CYPD2122,如何將文件保存為HEX格式?
在SimpleCentral_processGATTDiscEvent里面,根據UUID發現charHandle,這個charHandle在UUID改為128bit后是否還是保存為8字節?
STM32MP135如何使用opencv-python或v4l2-ctl打開攝像頭,并保存為圖片?
labview屏幕找圖,返回找到的位置XY坐標
RTT使用unicode編碼,編譯不通過是為什么?
怎么編寫Framebuffer驅動程序
![怎么編寫<b class='flag-5'>Framebuffer</b>驅動程序](https://file1.elecfans.com/web2/M00/C6/45/wKgaomX829SAfIacAAAbtdy6Rus988.png)
評論