参考NUC970_NonOS_BSP的LCD_MPU例程移植了LVGL,但没有使用LCM双缓存功能,而是使用LCM单缓存,需要更新显示时才刷新屏幕。工作没问题。
参考NUC970_NonOS_BSP的USBH_MassStorage和SD_FATFS例程,实现了USB MSC,能当读卡器用。
将LVGL,MSC组合在一起,单单做读卡器或单单使用屏幕都能正常工作。在电脑读写TF卡时,点击屏幕,屏幕应该会更新的,但这时程序极易发生程序死机,电脑没显示U盘有断开连接,用sysprintf打印调试信息,发现USB中断程序里的USBD_GINTSTS_EPBIF_Msk有周期响应,但程序就是不正常运行。通过多个地方添加sysprintf打印调试信息,初步判断应该是在lv_task_handler(这函数是1ms执行一次的)里进入死循环。用Jlink连接调试时,发现电脑不能识别MSC,无法检测哪里出问题。
该怎么让LVGL和USB MSC一起正常工作?
------------------------------------------------
已解决。
通过取消MSC的功能,1s执行1次500ms的while循环堵塞,发现问题所在:
disp_flush执行到执行lv_disp_flush_ready的过程中是不能执行lv_task_handler的,不然若在这过程中LVGL要更新显示,就会进入lv_refr.c 里的某个while(vdb->flushing){。。。}里不退出。
最近编辑记录 dick2945 (2022-01-23 11:03:53)
离线