有時候我們需要將FreeRTOS和LVGL頁面切換為LCD純手動繪制,提供更高的靈活性和可定制性。
-
自定義界面設計:使用LCD純手動繪制界面,可以完全自定義界面的外觀和行為。可以根據特定的需求和設計概念創建獨特的用戶界面,而不受LVGL框架的限制。
-
資源優化:LVGL是一個功能強大的圖形庫,它提供了豐富的控件和功能,但同時也需要占用一定的系統資源。通過使用LCD純手動繪制,可以根據具體應用的需求,靈活地控制和優化系統資源的使用,提高系統的效率和性能。
-
快速原型設計:對于某些項目,可能需要快速原型設計或臨時界面,而不需要過多的界面交互和復雜的控件。使用LCD純手動繪制可以快速實現簡單的界面,加快開發進度。
-
跨平臺兼容性:使用LCD純手動繪制界面可以實現在不同平臺和設備上的交叉兼容性。由于LVGL是基于C語言編寫的,通過手動繪制界面可以將應用程序移植到其他平臺上,而無需太多的修改和調整。
在一開始我們嘗試了將LVGL界面的更新任務刪除,刪除的同時創建一個LCD手動繪制任務,然后試圖從LCD切換至LVGL界面的時候,刪除LCD手動繪制任務,重新創建LVGL任務。很幸運,LCD任務正常地跑起來了,能夠正確地顯示和更新,但是嘗試返回卻失敗了。
后來嘗試了創建一個LVGL的screen,就是什么內容都沒有的,按按鍵就返回。測試結果表明,在無LCD任務創建的情況下可以正常返回,但是當加入手動繪制的LCD任務創建刪除之后,返回可能是卡死在LCD初始化清屏,可能是在操作lcd任務一兩步之后就卡死。由于LVGL較大,下載燒錄要花上三四分鐘,在經過多次調試之后,我觀察發現多數情況下,OLED任務并沒有卡死,雖然此時LVGL已經是異常了。說明問題應該是出現在LVGL的語法邏輯這些內容上,應該是不屬于硬件卡死。結合LCD觸摸無反應,我覺得可能是LVGL搶占了。
我又嘗試了不刪除LVGL,也不創建LVGL screen的方式,也就是嘗試掛起LVGL任務。
具體流程為:用戶進入需要LCD手動繪制的界面,暫停LVGL定時器,掛起LVGL任務,創建LCD手動繪制任務,結束時刪除LCD手動繪制任務,恢復LVGL任