最近在使用LVGL8.3开发产品,在切换界面时会概率出现重启,报错为(LoadProhibited). Exception was unhandled.
原因及解决方法:因为我用的是FREERTOS+LVGL,而LVGL的线程是不安全的,因此在FREERTOS的任务中调用LVGL相关库时,会出现重启问题。
解决方法:在lv_task_handler()所在线程和调用了LVGL库的线程加上互斥锁
if(pdTRUE == xSemaphoreTake(lvgl_mutex, portMAX_DELAY))
{
//ESP_LOGI(TAG, "xSemaphoreTake");
lv_task_handler();
xSemaphoreGive(lvgl_mutex);
}
//其他线程的while(1)循环里
if(pdTRUE == xSemaphoreTake(lvgl_mutex, portMAX_DELAY))
{
user_function()
xSemaphoreGive(lvgl_mutex);
}