一. littlevgl有幾個線程,作用是什么?
三個,主線程一個,和在主線程的hal_init函數中創建的另兩個sdl線程。
主線程完成一系列初始化工作后,循環每10ms調用在lv_init函數中注冊的三個任務,indev_proc_task,lv_refr_task,anim_task,重點關注的是每50ms處理一次的輸入處理indev_proc_task和每30ms處理一次的畫面刷新lv_refr_task。
monitor_sdl_refr_thread線程負責輸出圖像和鼠標鍵盤的輸入處理,每次處理后sleep 50ms。
tick_thread線程每5ms增加計時變量一次,用來為全局提供時間。
二. 輸入檢測到圖像輸出的過程(以單個按鈕被鼠標按下為例)
1.monitor_sdl_refr_thread線程中
鼠標按下,記錄鼠標位置數據
2.主線程中
在indev_proc_task中讀取鼠標位置數據,和控件位置比較,得到控件指針,調用控件signal_func函數,此函數再調用lv_btn_set_state(btn, LV_BTN_STATE_PR)設置按鈕狀態為按下狀態,此時畫面並沒有實際更新,可以看成是發出了畫面更新請求。
在lv_refr_task中處理收到的畫面更新請求,實際上是修改了畫面變量tft_fb
3. monitor_sdl_refr_thread線程中
根據變量tft_fb的值更新畫面