推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

串口丢包的十个常见疑问解答

资料介绍

串口丢包的十个常见疑问解答 【概述】 干嵌入式这些年,串口丢包是我被问得最多的问题,没有之一。有人说是硬件抗干扰不行,有人说是协议没做好,还有人干脆赖到操作系统头上。要我说,十次丢包有七八次都不是单一原因,而是好几个因素叠在一起闹出来的。这篇我就把自己这些年踩过的坑、试过的办法,挑十个最典型的疑问挨个讲一遍,说的都是实操,带点个人判断,大家看着用。 先说清楚我的立场:串口本身不丢包,丢包的永远是"用串口的人"。所谓串口丢包,本质上就是接收端没能把发送端送出来的每一帧都完整接住。原因要么是缓冲区满了没来得及取走,要么是电平信号被干扰破坏了帧结构,再要么是波特率对不上把帧看错了。想明白这一点,排查思路基本就有方向了。 【要点一】为什么接收缓冲区总是溢出? 这是我遇到的第一个大坑。早年做产品,接收缓冲区就开了 128 字节,数据一多就溢出,稍慢一点去读就被冲掉了。我个人的经验是,缓冲区大小必须按"最坏情况下的单帧最大长度 + 余量"来算,宁可开大一点,也别省那几十字节的 RAM。真的,这个钱省不得。 【要点二】中断里处理太慢会不会丢包? 会,而且这是最常见的一种。很多人把数据处理逻辑整个塞进串口中断,比如在中断里解析协议、查数据库、甚至做加密,结果下一个字节到来时还在忙,就被丢了。我的建议是中断里只做两件事:把数据搬进缓冲区,把标志位置位。剩下的解析放主循环或专门的任务里做。这个原则我坚持了很多年,几乎没再为中断丢包操过心。 【要点三】波特率是不是越准越好? 波特率不准是丢包的元凶之一。双方时钟源的误差一旦累积到半个位宽以上,采样点就偏移到了错误的位,整帧就读歪了。个人建议系统时钟尽量用高精度晶振,实在要用内部 RC 振荡器,也要确认波特率误差控制在合理范围内,并且给自己留点裕量。 【要点四】硬件流控到底要不要开? 这个得分场景。

部分文件列表

文件名 大小
串口丢包的十个常见疑问解答.docx 39K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载