串口接收缓冲溢出问题

ocean1004 2010-09-04 04:18:27
串口编程里,下位机一次性发来了102400个字节的数据,上位机的串口接收缓冲只设置为4096,所以只接收了4096个字节的数据,怎样才能接收到10240个字节的完整数据?

把程序做成应答式是一种方式,但是现在下位机只能这样发送,所以上位机不得不一次性接收,但是接收缓冲设置太大了会不会有问题?

再说,接收缓冲再大,也是不够的。



还有个问题,我这里的一次性发送是用sscom32串口调试工具发过来的。串口的接收缓冲区和发送缓冲区的MaxSize应该是一样大的吧,如果超过了这个MaxSize,发送端是否自动会把数据截断,分段发送?这样的话,接收方也就可以分段接收了。 那么就是说我只要把接收缓冲区设置成最大,就可以保证数据可以完整接收了,是这样吗?
...全文
1946 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexmayer 2010-09-08
  • 打赏
  • 举报
回复 1
串口编程里,下位机一次性发来了102400个字节的数据

串口无论如何也不会比CPU更快,你可以用个独立的线程,不停的读入串口数据,写入自己的一个buffer,另一个线程取出处理,做好同步处理就可以了。
用户 昵称 2010-09-07
  • 打赏
  • 举报
回复
线程中不停的读。
alicktony 2010-09-04
  • 打赏
  • 举报
回复
用循环从缓冲区读数据,一直读到没有数据结束
CH341的串口方式支持WINDOWS 98/ME/2000/XP/Vista/Linux,提供相关驱动程序, CH341的USB转串口支持大多数常用的串口监控及调试工具程序。 驱动安装方法: 1. 标准INF文件安装方法 WINDOWS提示找到新硬件,指定驱动程序所在目录DRIVER,自动安装驱动, 如果WINDOWS没有提示找到新硬件,那么在设备管理器的硬件列表中, 选择带问号的USB设备,更新驱动程序并指定目录。 2. 使用驱动程序安装工具 先拔掉USB串口连接线,然后安装,然后插上连接线 直接使用CH341SER.EXE安装包,可以安装/升级/卸载驱动程序, 该方法更适用于最终用户。 CH341串口使用方法: CH341实现USB转串口,在逻辑功能方面的使用方法与普通计算机串口相同。 与普通计算机串口的区别: CH341提供的是仿真串口,所以不支持串口本身的纯硬件操作,例如I/O操作, 普通计算机串口是静态设备,而CH341串口是动态设备,理论上随时会断开, CH341的附加功能(下面有介绍):读取外部串行EEPROM,支持更高波特率。 提供“模块调试”工具,启动后将“类型”选择为“手工输入发送”, 打开串口后就可以用于CH341串口或者普通串口的输入输出监控及收发调试。 注意事项: CH341串口是即插即用的USB设备,正在使用CH341串口进行数据传输的过程中, 不可以将其断开(断开是指从USB插座中取出CH341或者关闭CH341的电源), 也就是说,必须在应用程序关闭该串口后,CH341串口才可以从USB插座中拔出。 如果在应用程序使用CH341串口的过程中,CH341串口设备从USB插座中断开, 那么应用程序应该尽快关闭CH341串口并退出(关闭及退出可能需要数秒时间)。 如果在CH341串口通讯过程中发生错误,极有可能是CH341串口已经物理断开, 所以在检测到错误后建议关闭CH341串口,稍等两秒后再重新打开串口通讯。 采用设备事件通知的方法可以及时了解CH341串口设备的连接与断开, 从而使串口应用程序能够及时打开和关闭CH341串口。 串口动态链接库CH341PT.DLL提供了API,可以监视CH341串口插拔事件, 可以搜索和识别CH341串口等,具体需参考CH341PT.H文件。 如果通讯波特率较高,建议设置较大的缓冲区,尤其在WINDOWS 98/ME下, 线程调度能力和USB实时性都比WINDOWS 2000/XP差,如果串口接收缓冲区较小, 那么在通讯波特率较高时,接收大量数据会导致串口缓冲溢出而丢弃数据。 由于底层的USB是将多个字节组成数据包后安插到各个1mS帧中进行传输, 所以有可能将串口收发的紧靠着的两个字节实际分割在两个USB数据包甚至 两个USB帧中,在最坏情况下这两个字节在时间上有可能相隔1mS甚至2mS。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧