Art_Pi學習筆記5.1:優化LVGL軟件包提升刷屏的速度

使用littlevgl2rtt軟件包成功點亮Art-Pi多媒體擴展版以後,一直心心念RGB屏幕接口。因而興沖沖的下單了一塊正點原子的4.3寸RGB觸摸屏來用。收到屏幕以後,一路輕車熟路,配置,編譯,下載,一看傻了,怎麼刷屏的速度比多媒體擴展板的SPI屏還慢。有多慢,是眼見一行一行的刷新的慢!緩存

因而,論壇翻貼,QQ羣請教大佬,通過三天三夜的摸索,總算優化到一個本身比較滿意的結果了。再此,要感謝各位大佬無私的提供技術支持,幫忙解決問題。如今我把過程記錄下來,方便後來的小夥伴遇到相同問題的時候有解決的思路。固然,也但願有更好的方法的小夥伴們提出更好的優化方案。函數

開發工具:
RT-Thread Studio
OS版本:
4.0.3
開發板:
Art-Pi + 正點原子4.3寸RGB屏
軟件包:
Littlevgl2rtt(latest)
舒適提示:
下面的優化方案是基於該軟件包的優化,若是是本身一直lvgl的再也不此討論範圍。工具

首先是軟件包配置
硬件上要打開LCD和SDRAM
圖片.png開發工具

軟件包配置,這裏打開sample,就能夠先用軟件包的演示查看效果
圖片.png優化

正常狀況下,這樣配置後保存,編譯經過,下載。就能夠正常工做了。不過會發現圖像切換速度很是慢,很是卡。操作系統

下面就來談談如何優化,RGB屏使用的是LTDC接口推屏的,這部分驅動其實rtt已經幫咱們作好了,將LTDC接口封裝爲lcd設備,lvgl調用lcd設備接口對設備進行讀寫。該函數位於drv_lcd.c文件中,首先想要優化的是這個函數,不過暫時沒想到要怎麼優化。後面根據大佬的建議,lvlg不要經過這個接口來刷屏,而是直接刷屏,並且要開啓DMA2D,用DMA2D來刷。.net

開啓DMA2D,在stm32h7xx_hal_conf.h文件中,打開宏定義
圖片.pngblog

在stm32h7xx_hal_msp.c文件中添加,硬件層初始化代碼。
圖片.png教程

而後在drv_lcd.c文件中添加DMA2D軟件層面的初始化代碼
圖片.png接口

而且在drv_lcd_hw_init()函數中調用該初始化函數
圖片.png

到這裏,DMA2D的初始化就算是完成了,接下來要怎麼用呢?
去軟件包內修改littlevgl2rtt.c文件,
首先修改littlevgl2rtt_init()函數。
屏蔽掉原有的緩存buf,由於該buf取值較小,而art-pi上有使用SDRAM,擁有較大的內存空間,咱們能夠直接申請和屏幕像素相對應大小的緩存空間,並且申請兩個,由於lvgl支持雙刷buffer。
圖片.png

記得屏蔽掉原來buf申請內存空間的代碼
圖片.png

接下來改單刷buffer爲雙刷buffer
圖片.png

而後改刷屏的函數,lcd_fb_flush(),將函數中的內容所有屏蔽掉,改爲一下代碼。
圖片.png

這裏提供了兩種DMA2D的方式,一種是中斷方式,一種是輪詢方式。若是使用中斷方式,須要添加DMA2D中斷處理函數。
圖片.png

二者的區別就是,
採用輪詢方式的,則一直等待DMA2D傳輸結束,而後經過函數lv_disp_flush_ready()函數經過LVGL已經完成刷屏。
採用中斷方式的,則是在中斷處理函數中調用函數lv_disp_flush_ready()函數經過LVGL已經完成刷屏。

經過上述優化以後,刷屏速度大大提升。我的已經比較滿意了,能夠達到項目應用的要求了。固然還有更好的方法,好比本身移植LVGL而不是使用軟件包,或者是直接用DMA2D寄存器操做來刷屏,這些操做都比較高級,做爲初學者的我還沒學會。哪天我學會了,再來分享。或者有大佬能夠共享一下教程,衆樂樂一下。

再次,感謝在問題解決過程當中給我提供幫助的各位大佬們!

參考文檔:

LVGL 優化幀率技巧_無人等人的博客-CSDN博客
[https://blog.csdn.net/weixin_...

f429 discovery開發版 LVGL移植(帶操做系統)_無人等人的博客-CSDN博客
[https://blog.csdn.net/weixin_...

stm32 DMA2D使用中斷LVGL,提升LVGL幀率_紫楓洛天的博客-CSDN博客
[https://blog.csdn.net/a226754...

LVGL在rt-thread上的移植 - hechunc的我的空間 - OSCHINA - 中文開源技術交流社區
https://my.oschina.net/hechun...

原文連接:https://club.rt-thread.org/as...

相關文章
相關標籤/搜索