ESP32使用freertos更新lvgl控件内容
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);
}