帖子在这,200分,搞定了两边一道给分
http://expert.csdn.net/Expert/topic/1812/1812191.xml?temp=.2086756还有个问题:
BuildCommDCB中用的DCB结构
其中有一个Parity字段,取值是:
EVENPARITY Even //偶校验
MARKPARITY Mark //这个是什么意思?
NOPARITY No parity //不校验
ODDPARITY Odd //奇校验
SPACEPARITY Space //这个又是什么意思?谁能帮我解释下这两个取值的意思?
http://expert.csdn.net/Expert/topic/1812/1812191.xml?temp=.2086756还有个问题:
BuildCommDCB中用的DCB结构
其中有一个Parity字段,取值是:
EVENPARITY Even //偶校验
MARKPARITY Mark //这个是什么意思?
NOPARITY No parity //不校验
ODDPARITY Odd //奇校验
SPACEPARITY Space //这个又是什么意思?谁能帮我解释下这两个取值的意思?
那么这时候是不是表示,只有奇偶校验位为1的数据才能进串口?其他数据会在硬件上被忽略?
上面这个问题,做两个假设:
1、是,那么我是否需要在读入这一个字节以后用SetCommState把奇偶校验位重新设置回SPACEPARITY,这样才能进行下一个字节数据的读入?
2、不是,那么所有的数据都可以进入串口的话,本身这个设置就没有意义,难道还有什么API可以得到奇偶校验位的具体数值吗?如果COM口根据奇偶校验位来进行数据的过滤,那么会不会有这样的情况:
我得到了一个数据头,在我做处理的过程中,由于当前的串口设置为MARK,那可能接下去的数据就被过滤掉了,发生了丢包的情况,即使我的函数是立刻执行了一个SetCommState去设置SPACEPARITY,也有可能发生丢数据的可能,对吗?
1位起始、8位数据、1位校验(第9位数据)、1位停止
此时只有在校验位为1时才响应,从而用硬件过滤了地址以外的数据。下位机启动后,设置串口通讯方式为2或3,监听地址,所以你在发地址时把校验设位MARK,51装置接到地址后,修改校验方式为SPACE开始接收数据,此时你也要把校验设位SPACE发送数据。发送完后还要将通讯方式修改回去。但就向前面所说,修改校验方式主要是为了利用51的串口通讯方式的硬件屏蔽作用,所以在上传数据没有必要修改校验方式。这要看你们的通讯协议了
必须要根据这个奇偶校验位来做判断吗?PS:那边的帖子我去结掉,这里的,有时间的话麻烦再看看
如果你的实时性要求特别高,那么就需要和搞硬件的交流一下了,是不是可以换其他的方式