吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

將framebuffer保存為圖片來檢查內容正確性

STM32單片機 ? 來源:STM32單片機 ? 作者:STM32單片機 ? 2022-04-25 10:46 ? 次閱讀

1、前言

客戶在做 GUI 項目開發時,會碰到許多顯示相關的問題。

屏幕花屏是比較嚴重的問題,如果產品出現花屏,會嚴重影響使用體驗。正常的 UI 顯示,包括畫圖和將幀緩沖傳輸到屏幕兩個過程。如果畫圖過程出錯,那幀緩沖的內容就不對了,傳輸到屏幕后顯示也不可能正確。如果畫圖過程正確,而傳輸過程出錯,雖然幀緩沖的內容是對的,而屏幕接收到的數據出錯了,那屏幕顯示的內容自然也是錯誤的。因此在定位顯示錯亂、花屏等問題時,需要先判斷是畫圖出錯還是傳輸過程出錯。

本文會介紹一種方法,將幀緩沖內容導出并保存為圖片,來判斷幀緩沖內容是否正確。由于幀緩沖的內容為全部像素的 RGB 數據,在導出后需要借助其它工具將 RGB 數據轉換為圖片,方便在 PC 上直接查看。

這里可以使用 pythonpillow 包,將 RGB 轉換為JPG 圖片。而讀取幀緩沖的過程可以借助 python 的 pyswd 包來實現。

2、環境安裝

本機環境:Windows10 64bit 安裝 python 3.9.0 (測試過 3.9.6 正常),檢查系統環境變量,將 python 添加到 Path中。

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

ec3f427c-c3d1-11ec-bce3-dac502259ad0.png

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 文件。

ec540446-c3d1-11ec-bce3-dac502259ad0.png

4、測試及小結

在 L4R9-DK 板上進行了測試

(1) 無 GFXMMU 時,傳給腳本的參數,寬和高為實際 LCD 的寬和高將 GUI 固件燒錄到開發板后,屏幕正常顯示。在工程 map 文件中,找到 framebuffer 地址。打開 powershell,執行 pyswd_rgb2jpg.py:

ec6040f8-c3d1-11ec-bce3-dac502259ad0.png

(2)開啟 GFXMMU 時,framebuffer 對應為虛擬地址,傳給腳本的參數中,圖像的寬度要用GFXMMU 像素寬度

ec7b2332-c3d1-11ec-bce3-dac502259ad0.png

在完成環境安裝后,通過此腳本可方便查看 framebuffer 內容。如果出現屏幕花屏的問題,可導出 framebuffer 圖片查看。如果畫圖過程出錯,則導出的圖片顯示也是錯誤的。反之,如果畫圖過程正常,則 framebuffer 內容正常,導出的圖片也是正常的,這樣就需要查一下傳輸過程導致的顯示問題。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7145

    瀏覽量

    89581
  • 圖片
    +關注

    關注

    0

    文章

    203

    瀏覽量

    15968
  • Framebuffer
    +關注

    關注

    0

    文章

    8

    瀏覽量

    8086

原文標題:工程師筆記|將 framebuffer 保存為圖片來檢查內容正確性

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    DAC0832的典型接法幾點正確性的疑問求解

    DAC0832的典型接法幾點正確性的懷疑: 1.Iout2直接接地。電路輸出端子直接接地違背常理,那樣會燒壞片子。 2.LM336就這樣簡單的接下可以產生2.5v參考,不現實。需要接電源和限流
    發表于 02-05 09:21

    根據ADS1292R Data sheet組了一個前端電路,請問要如何測試電路的正確性?

    我根據ADS1292R Data sheet 自己組了一個前端電路,請問要如何測試電路的正確性?
    發表于 12-16 06:27

    ADS1278EVM-PDK連續采集方式保存數據時,能否保存為單個文件?

    ADS1278EVM-PDK請問連續采集方式保存數據時,Ready按后只能保存一系列文件(是不是不斷刷新只保存最后一次數據),不能保存單個文件。能否
    發表于 12-02 07:19

    ADCPROADS1278EVM-PDK用ADCPro在連續采集模式下能否保存為1個文件?

    ADCPROADS1278EVM-PDK用ADCPro在連續采集模式下能否保存為1個文件。現在不點亮Ready按鈕就只保存最后刷新的數據,如果點亮Ready按鈕就保存一系列文件比如以下所示,同樣大小系列文件。請問在ADCPr
    發表于 12-02 06:26

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-LCD顯示圖片編程示例之介紹framebuffer

    Framebuffer 字面意思就是幀緩存的意思,即顯存,里面保存著一幀圖像。事實上,對于嵌入式系統而言。沒有真正意義上的顯存,Framebuffer 是通過內存模擬出來的。一、LCD
    發表于 11-21 09:00

    飛凌嵌入式ElfBoard ELF 1板卡-LCD顯示圖片編程示例之介紹framebuffer

    Framebuffer 字面意思就是幀緩存的意思,即顯存,里面保存著一幀圖像。事實上,對于嵌入式系統而言。沒有真正意義上的顯存,Framebuffer 是通過內存模擬出來的。 一、LCD
    發表于 11-20 08:50

    ADS5282如何通過其他方式驗證寄存器寫入的正確性

    word. 測試結果: (1)差分數據對N端無變化 (2)差分P端輸出300多mv電壓,差分N端輸出100多mv電壓 另外,ADS5282是只寫芯片,如何通過其他方式驗證寄存器寫入的正確性
    發表于 11-18 08:33

    如何評估AIGC內容的質量和效果

    : 準確 : 事實核查 :確保AIGC生成的內容與已知的事實和數據相符。 引用來源 :檢查內容是否引用了可靠的來源,并且這些引用是否正確
    的頭像 發表于 10-25 16:02 ?1260次閱讀

    電腦如何直接使用rs232串口控制PGA460?如何檢測回復的數據的正確性

    電腦直接使用rs232串口控制PGA460,該怎么連接?怎樣檢測回復的數據的正確性
    發表于 10-11 06:12

    使用CY521 EVAL配置CYPD2122,如何文件保存為HEX格式?

    我正在使用 CY521 EVAL 配置 CYPD2122。 一切運行正常,我現在希望文件保存為 HEX 格式,以便通過 MiniProg4 進行編程。但是,當我進入\"保存到固件文件
    發表于 08-12 08:19

    在SimpleCentral_processGATTDiscEvent里面,根據UUID發現charHandle,這個charHandle在UUID改為128bit后是否還是保存為8字節?

    SimpleCentral_processGATTDiscEvent里面,根據UUID發現charHandle,這個charHandle在UUID改為128bit后是否還是保存為8字節?還是要保存16字節?若還是保存8字節應該
    發表于 05-30 07:55

    STM32MP135如何使用opencv-python或v4l2-ctl打開攝像頭,并保存為圖片

    行。 但是官方的例程中,直接用v4l推送到media上,直接顯示的又是可以的。 請問我該如何使用opencv-python 或v4l2-ctl打開攝像頭,并保存為圖片
    發表于 05-30 06:16

    labview屏幕找圖,返回找到的位置XY坐標

    CheckSUM值。 圖中的截圖按鈕點擊后可截取屏幕上你需要的任意位置,盡量只選擇感興趣的區域,保存為.bmp格式的圖片到路徑。選擇路徑后點擊找圖按鈕即可實現找圖。也有屏幕找色,OCR,窗口句柄等子vi,感興趣的私聊。
    發表于 05-11 08:59

    RTT使用unicode編碼,編譯不通過是為什么?

    1、我們為了設備兼容俄語,就需要使用到unicode編碼,字符串保存文件保存為unicode編碼,但是編譯之后出現一大堆錯誤。 2、編譯器使用的是rtthread_studio. 3、我們的編譯器不支持unicode編碼嗎?
    發表于 03-27 08:01

    怎么編寫Framebuffer驅動程序

    Framebuffer 驅動程序框架 分為上下兩層: fbmem.c:承上啟下 實現、注冊 file_operations 結構體 把 APP 的調用向下轉發到具體的硬件驅動程序
    的頭像 發表于 03-22 09:13 ?613次閱讀
    怎么編寫<b class='flag-5'>Framebuffer</b>驅動程序
    百家乐官网对付抽水| 五星百家乐官网的玩法技巧和规则| 网上百家乐官网游戏玩法| 百家乐平六亿财富| 大发888 备用6222.com| 吕梁市| 狮威百家乐官网的玩法技巧和规则| 玩百家乐出千方法| 国外博彩网站| 百家乐官网娱乐网真人娱乐网| 百家乐10个人| 宝龙娱乐城官网| 百家乐官网楼梯缆大全| 网络百家乐金海岸破解软件| 德州扑克刷分| 百家乐官网赌场导航| 百家乐java| 澳门赌场娱乐城| 在线玩百家乐官网的玩法技巧和规则| 跨国际百家乐的玩法技巧和规则 | 大发888下注| 玩网上百家乐官网的技巧| 百家乐娱乐网佣金| 泸溪县| 打百家乐如何赢分| 大发888娱乐城破解软件| 百家乐官网15人桌布| 包赢百家乐的玩法技巧和规则| 永利百家乐官网游戏| 精英百家乐现金网| 金花娱乐城注册| 汇丰百家乐官网娱乐城| 大发888客服端下载| 百家乐官网平台有什么优惠| 大发888体育网| 在线百家乐官网平台| 华泰百家乐的玩法技巧和规则 | 百家乐破解的方法| 博彩网论坛| 网站百家乐博彩| 南靖县|