关于串口的简单问题,回答三个问题中的一个就给分,50分奉送,不够加贴再加,全部家当压上(50分)

  • 主题发起人 zhaokaien
  • 开始时间
说实话,本怎么不知道怎么开贴.总是什么积分不够的.这个论坛真是晕死个人的.怎么开贴,来个好心的人告诉我?
 
问题1:
我不知道为什么这样,但我用的USB转串口,不管你的缓冲怎么设置,接收到是数据都是一个字节一个字节的,这应该是速度不同引起的.
还有,缓冲设置为1,数据没丢失应该是串口协议的原因,好象是握手协议中,对方缓冲满时等待机制.
 
1、缓冲区的作用是用来保存由于某种原来没被发送出去或接收后没被及时读取的数据的。
如果发送方和接收方都在正常接收,缓冲区的占用通常是固定或变化不大的。但是当你调试程序或sleep时,串口的硬件仍在接收或发送数据,而串口的底层驱动会将接收到的数据写入缓冲区,或将缓冲区里的数据通过硬件发送出去,这时缓冲区里的数据自然会发生变化。
另外,对于串口来说,其缓冲区有个默认的值,当你所设置的值小于这个值时,系统会自动以默认值来代替它。(默认值的大小俺不记得了,你可以查一下相关的资料和规范)。
2、三线的情况下可以用软件流控制方式,其基本原理是在发送端和接收端之间的数据流中插入特定的字符来进行流控制的,如:#17和#19。而这个过程是系统自动加入的,不需要人工进行控制。
但需要注意的是,采用软件流控制的情况下自己写传输程序,要避免使用“流控制字符”在你传输的数据中出现,否则的话,这些数据会被系统“吃”掉。
 
to simon707:
非常感谢这位大侠,你解决了我很多的困惑,再次感谢!!
关于软件流的问题,我还知道的是,我们自定义的协议难道不是通过控制xon,xoff来进行控制的吗,能不能在自定义协议方面指点一下,谢谢了,结贴时会有小分,请笑纳!!
 
xon/xoff 协议是针对全双工双向通讯的,报文的接收端要通知发送端停止或开始,如果我们使用的全双工通讯方式,那么当然也可以采用xon/xoff方式。
 
to zhaokaien:
不用客气。
如果你在串口通信中使用了“流控制”(不管是硬件的还是软件的),那么,在数据传输的
过程中,这个“控制”的不需要你人工干预,是系统“自动”进行的。你只需要按照你自己
定义的协议在两个串口间进行数据的传送。
打个比方吧:在打电话时,你只需要用耳朵听对方的话,用嘴说话,交流你想要交流的信息就是了,而不比管电话网的传输机制是什么,是怎样编码的、是怎样传输的、怎样纠错的,
等等,都不需要你再去干预。
 
恕我愚钝,既然流控制只要设置以后就由系统自动执行,那程序员自定义协议有什么意义,请在自定义协议方面指点一下!!谢谢!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
962
SUNSTONE的Delphi笔记
S
D
回复
0
查看
892
DelphiTeacher的专栏
D
顶部