工作队列提交任务成功、环形缓冲区也初始化了,但就是出现数据丢包,表现为——传感器采集的数据,写入缓冲区后,主程序读取不到,或者读取的数据不完整 环形缓冲区大小设置太小,工作队列提交任务太快,缓冲区满溢,导致新数据覆盖旧数据,出现丢包;排查方法:把缓冲区大小改大(家电场景设64、128即可),同时确保缓冲区读写判断逻辑正确,避免满溢。 工作队列任务提交,早于环形缓冲区初始化;排查方法:调整初始化顺序,必须先初始化环形缓冲区,再初始化工作队列、提交任务,顺序错了,数据根本写不进缓冲区 两者搭配后,队列执行卡顿,主程序卡死,LED不闪、按键无响应,甚至开发板重启。 工作队列任务函数里,直接读取环形缓冲区,且没有判断缓冲区是否有数据,导致读空、程序卡死;排查方法:读取缓冲区前,先加判断(缓冲区非空再读取),避免读空报错 任务函数里加了延时,阻塞队列的同时,也导致缓冲区数据堆积、满溢;排查方法:删除任务函数里所有delay延时,耗时分段处理,不阻塞队列和缓冲区读写 环形缓冲区读写没有加互斥保护,工作队列任务和主程序同时操作缓冲区,导致数据错乱、程序卡死;排查方法:在缓冲区读写函数里,加简单的互斥判断(比如用标志位),避免同时操作 环形缓冲区数据类型,和工作队列任务传递的数据类型不匹配 中断里写入缓冲区的代码,和工作队列提交任务的代码,没有同步 先查初始化顺序——环形缓冲区 → 工作队列 → 任务提交,顺序错了先调整 查缓冲区——大小是否足够、数据类型是否匹配、读写是否有判断、是否加了互斥 查工作队列——任务函数是否有延时、任务提交是否在数据写入缓冲区之后、任务参数是否正确 烧录测试,若还有问题,用串口打印,定位是缓冲区没写进数据,还是队列没执行任务,精准排查 比如出现丢包,查缓冲区大小是32,改到128,调整初始化顺序,重新烧录,丢包问题直接解决 初始化顺序:环形缓冲区先初始化,工作队列后初始化,任务最后提交,顺序不能乱 数据同步:中断写入缓冲区 → 提交工作队列任务 → 任务读取缓冲区,一步都不能少 互不干扰:缓冲区只负责存数据,队列只负责调度任务,任务只负责读取处理,不交叉操作、不阻塞 工作队列+环形缓冲区搭配,报错都集中在「顺序、数据、阻塞」三个点
00:00 / 05:36
连播
清屏
智能
倍速
点赞13
00:00 / 12:25
连播
清屏
智能
倍速
点赞15
00:00 / 04:11
连播
清屏
智能
倍速
点赞414
00:00 / 03:28
连播
清屏
智能
倍速
点赞108
00:00 / 03:19
连播
清屏
智能
倍速
点赞7
00:00 / 08:12
连播
清屏
智能
倍速
点赞2322
00:00 / 00:54
连播
清屏
智能
倍速
点赞78