1. 什么情况下ch395接收到的一包udp数据会产生多次接收中断,导致一包数据被拆分成多组数据(比如发送方发送一个10字节的数据,ch395会产生一个4字节中断和一个6字节中断)。
2. 为什么会产生数据长度为0的接收中断
3. 什么情况下多个udp包会被合并,可否避免??
我的工况是不希望udp包被分组,也不希望包合并该如何处理?
1. 什么情况下ch395接收到的一包udp数据会产生多次接收中断,导致一包数据被拆分成多组数据(比如发送方发送一个10字节的数据,ch395会产生一个4字节中断和一个6字节中断)。
2. 为什么会产生数据长度为0的接收中断
3. 什么情况下多个udp包会被合并,可否避免??
我的工况是不希望udp包被分组,也不希望包合并该如何处理?
1、数据包可能存在粘包的情况。如果存在“分包的情况”,一是长度过长必定会分包(超过1514的规定),二是对端发过来就是分开的;可能和窗口大小有关系;三是不要直接读长度,按照全局中断-socket中断方式-中断处理。
2、中断会周期性更新,因为上报和更新是异步的,在上报过程中避免漏中断所以一步过程中会少有0中断产生。
3、粘包原因是中断数据没有及时读走导致数据缓冲区数据累加,一是外部单片机处理不及时,二是Ch395芯片本身处理有限,目前优化方式是是单片机对CH395中断更快响应。
关于分包的情况的说明:
1. 发给ch395的包的长度固定10字节。
2. 用wireshark监控并没有发现分包。
3. 是按照“全局中断-socket中断方式-中断处理”这样处理的,这种情况下仍然有分包请问怎么处理。
您好,若调试还是出现分包,请联系18061701682,将工程发来测试。