默认情况下,LVGL不是线程安全的。
但是,在下列情况下,调用LVGL相关函数是安全的。
- 在Event中。
- 在lv_task中。
Tasks and threads
如果需要使用正常的Task或者是线程,就需要使用mutex,在lv_task_handler之前获取,在其之后释放。同样在其他Task或者Thread里面,也要用同一个的mutex包裹住每个LVGL相关的调用。这样,就能在真正的多任务环境中使用LVGL。要确保避免并行调用LVGL函数。
Interrupt
尽量避免在中断中调用LVGL函数(除了lv_tick_inc()和lv_disp_flush_ready())。但是,如果非要这么做,那么在lv_task_handler()运行的时候,必须禁用中断处理函数中调用了LVGL函数的中断。比较好的处理方式是使用标志位或者其他值,然后在lv_task()中周期性检查。