- 1
- 2
- 3
- 4
- 5
串口丢包的十个常见疑问解答
资料介绍
串口丢包的十个常见疑问解答 【概述】 干嵌入式这些年,串口丢包是我被问得最多的问题,没有之一。有人说是硬件抗干扰不行,有人说是协议没做好,还有人干脆赖到操作系统头上。要我说,十次丢包有七八次都不是单一原因,而是好几个因素叠在一起闹出来的。这篇我就把自己这些年踩过的坑、试过的办法,挑十个最典型的疑问挨个讲一遍,说的都是实操,带点个人判断,大家看着用。 先说清楚我的立场:串口本身不丢包,丢包的永远是"用串口的人"。所谓串口丢包,本质上就是接收端没能把发送端送出来的每一帧都完整接住。原因要么是缓冲区满了没来得及取走,要么是电平信号被干扰破坏了帧结构,再要么是波特率对不上把帧看错了。想明白这一点,排查思路基本就有方向了。 【要点一】为什么接收缓冲区总是溢出? 这是我遇到的第一个大坑。早年做产品,接收缓冲区就开了 128 字节,数据一多就溢出,稍慢一点去读就被冲掉了。我个人的经验是,缓冲区大小必须按"最坏情况下的单帧最大长度 + 余量"来算,宁可开大一点,也别省那几十字节的 RAM。真的,这个钱省不得。 【要点二】中断里处理太慢会不会丢包? 会,而且这是最常见的一种。很多人把数据处理逻辑整个塞进串口中断,比如在中断里解析协议、查数据库、甚至做加密,结果下一个字节到来时还在忙,就被丢了。我的建议是中断里只做两件事:把数据搬进缓冲区,把标志位置位。剩下的解析放主循环或专门的任务里做。这个原则我坚持了很多年,几乎没再为中断丢包操过心。 【要点三】波特率是不是越准越好? 波特率不准是丢包的元凶之一。双方时钟源的误差一旦累积到半个位宽以上,采样点就偏移到了错误的位,整帧就读歪了。个人建议系统时钟尽量用高精度晶振,实在要用内部 RC 振荡器,也要确认波特率误差控制在合理范围内,并且给自己留点裕量。 【要点四】硬件流控到底要不要开? 这个得分场景。
部分文件列表
| 文件名 | 大小 |
| 串口丢包的十个常见疑问解答.docx | 39K |
最新上传
-
yahuang001 打赏3.00元 3天前
-
yahuang001 打赏1.00元 3天前
-
zhongshaoxiong 打赏3.00元 3天前
-
他山之石可攻玉 打赏60.00元 3天前
用户:烟雨
-
江岚 打赏210.00元 3天前
用户:潇潇江南
-
江岚 打赏100.00元 3天前
-
21ic下载 打赏310.00元 3天前
用户:gsy幸运
-
21ic下载 打赏310.00元 3天前
用户:zhengdai
-
21ic下载 打赏310.00元 3天前
用户:江岚
-
21ic下载 打赏210.00元 3天前
用户:潇潇江南
-
21ic下载 打赏60.00元 3天前
用户:他山之石可攻玉
-
21ic下载 打赏60.00元 3天前
用户:烟雨
-
21ic下载 打赏60.00元 3天前
用户:w178191520
-
21ic下载 打赏60.00元 3天前
用户:w993263495
-
21ic下载 打赏110.00元 3天前
用户:xzxbybd
-
21ic下载 打赏60.00元 3天前
用户:zq_1943
-
21ic下载 打赏20.00元 3天前
用户:kk1957135547
-
21ic下载 打赏20.00元 3天前
用户:sun2152
-
21ic下载 打赏20.00元 3天前
用户:铁蛋锅
-
21ic下载 打赏20.00元 3天前
用户:xuzhen1
-
21ic下载 打赏20.00元 3天前
用户:w1966891335
-
21ic下载 打赏35.00元 3天前
用户:有理想666
-
21ic下载 打赏15.00元 3天前
用户:nuaanuaa111
-
21ic下载 打赏20.00元 3天前
用户:liqiang9090
-
21ic下载 打赏15.00元 3天前
用户:ningmengge
-
21ic下载 打赏10.00元 3天前
用户:mulanhk
-
21ic下载 打赏5.00元 3天前
用户:asys
-
21ic下载 打赏10.00元 3天前
用户:舞蹈荀彧
-
21ic小能手 打赏5.00元 3天前
资料:磁编码器开源方案
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏50.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏10.00元 3天前
-
21ic小能手 打赏10.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏3.00元 3天前




全部评论(0)