LVGL不是線程安全,所有 lv_xxx方法只能在GUI主線程調用。
freertos都是線程池,子線程,不能直接更新lvgl,不然看門狗被觸發,死機。
推薦方法案例:
假如搜索wifi列表得到參數是wifi_options,需要通知lvgl更新
lv_async_call是線程安全,使用方法如下:
///寫一個方法需要更新UI,方法體
void apply_async_call_Wifi(void *wifi_options){
? ? ?lv_dropdown_set_options(guider_ui.dd, wifi_options); ?// 設置下拉列表的選項
//理論上所有的lvxxxxxx();方法
}
//調用主線程更新,使用lv_async_call
///////////? ?
void xxxxx(freertos線程){
.......wifi_options:回調里邊得到的參數.......
lv_async_call(apply_async_call_Wifi,wifi_options);//調用主線程更新UI
? ? vTaskDelete(NULL);
}