1,启动独立送显示线程;
2,添加主线程和display线程同步操作。
LVGL diplay单buffer:
-----------
flush_cb()在GUI主线程渲染完成一帧后调用,输入变更区域,和变更帧数据指针:
1, 发送帧更新信号给display线程;等待显示空闲信号(送显示线程等待vsync后设置该信号);
2, 送显示线程获取更新信号更新变更数据到内核帧buffer;
3, 送显示线程更新数据后waitvsync;
4, waitvsync返回后调用lv_display_flush_ready()通知LVGL可以渲染下一帧。
LVGL display 双buffer:
----------
1, flush_cb()发送信号给送显示线程,通知有新数据帧需要送显示后立即返回,主线程尝试绘制下一帧;
2, 送显线程获取新数据帧信号,更新数据并发送FBIOPAN_DISPLAY切换活动帧;
3, 送显示线程等待内核驱动vsync信号;
4, 发送该帧空闲信号给主线程。
差异:
1,单buffer情况下,lvgl无需记录空闲帧对象,只需要一个标志即可;双buffer情况下需要记录,如果两个buffer都没有空闲,主线程需要挂起等待;
2,双buffer情况下,送显示线程waitvsync前需要发送活动帧切换信号;