I have an application with 12 screens, and I’m working at improving performance.
The screens are240x240 16bit 565RGB and the bus is 25mhz SPI, with 4 screens sharing a bus, so 3 buses total.
My driver is written using a queue system and DMA, so my_disp_flush writes a selected area and the flush_complete_cb is fired to call lv_disp_flush_ready.
My SDRAM buffers are set to slightly oversize so I don’t have true double buffering, which would case unnecessary bus traffic.
The bottlenecks are as follows:
When a screen has more than two areas to refresh, it spends a lot of time in one of the
while(vdb->flushing); instead of proceeding on to try the next screen.
At this point, I think the library should at least have some RTOS macro options to task yield at these points, and perhaps the task scheduler or lv_refr_areas could be tweaked to yield a more round robin approach between screens?