串口编程--缓冲区大小问题

砂锅终结者 2016-09-07 11:58:26
现在我遇到这样二个问题:
--------------------------------------------------------------------------------------------------
【第一个】
对于 :SetupComm(hcom,1024,2048);
设置输入缓冲区大小为:1024字节,输出缓冲区大小为2048字节。

我的理解是:
输入缓冲区的目的:不能实时接收其他设备传来的数据,先放那,有空了再去拿(如果其他设备发送过来的数据大于1024字节就会丢数据了)。
输出缓冲区的目的:把想要发送的数据段瞬间放到那,不用一个个的发,让那边去发,主程序该干嘛干嘛。

现在问题来了,我写了一个测试程序,只接收串口发送来的数据。
缓冲区我是这样设的:SetupComm(hcom,1,1);
发送数据的设备,一次发送10字节,我这边读取是1s一次读取10字节的查询方式。
按理说,我设置了输入缓冲区大小为1字节,我1s读取一次,最多只能得到1个字节的数据(因为缓冲区就1个字节),可实际情况是,怎么接收都是对的,完全没错误!
(我考虑也许是恰巧我刚接收时,那般刚开始发送~!,可我让发送设备1s内发送10次,这边接收10次,每次的10字节都是正确的,感觉输入缓冲区还是很大,根本就不是1个字节!)

问题:
是我对SetupComm(hcom,1,1);理解错误了么?
还是SetupComm(hcom,1,1);根本就没用?
---------------------------------------------------------------------------------------------------
【第二个】
关于:奇偶校验位
windows编程写个串口发送程序,发送给下位机,奇偶校验位都是正确的。

但当我接收下位机上来的数据时,奇偶校验完全没作用!
比如:上位机设置了奇校验,下面发送来的校验位固定为0(或1),'0'与'1'都接收!
(因为不管是奇校验、还是偶校验 0011,0000与0011,0001 不可能同时接收)
问题:这是为什么呢?
...全文
7374 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjx774173329 2018-05-05
  • 打赏
  • 举报
回复
SerialPort.Read (Char[], Int32, Int32)方法的第三个参数是 读最大字符数,假如你设置10 如果缓冲区小于10 那就把缓冲区全读了 如果大于10 就只读10个
zgl7903 2016-09-08
  • 打赏
  • 举报
回复
1 个人猜测: SetupComm 是设置驱动的缓冲区,但 串口的硬件部分一般都会有FIFO,因此可以在一段时间下就算软件不参与也可以保证接收不丢失数据 2 DCB 中 fParity 和 Parity 需要同时设置

2,644

社区成员

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

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