【问题标题】:Windows API ReadFile Drops Null Characters (Serial Port)Windows API ReadFile 删除空字符(串行端口)
【发布时间】:2014-10-02 00:45:41
【问题描述】:

我正在使用 ReadFile 读取一个空字符“0x00”,但它看不到它。

如果我向我的程序发送“0x01 0x02 0x00 0x03”。它将收到“0x01 0x02 0x03”。我知道我的发送方正在发送空字符(我使用范围来查看数据)。

我检查了 DCB 结构并将 fNull 设置为 false。 (这应该允许接收而不是丢弃空字节)

这是从 GetCommState 中显示的 DCB 的配置:

    DCBlength   28
    BaudRate    9600
    fBinary 1   
    fParity 0
    fOutxCtsFlow    0   
    fOutxDsrFlow    0   
    fDtrControl 0   
    fDsrSensitivity 0   
    fTXContinueOnXoff   0   
    fOutX   1
    fInX    1   
    fErrorChar  0
    fNull   0
    fRtsControl 0
    fAbortOnError   0
    fDummy2 0
    wReserved   0
    XonLim  2048
    XoffLim 512 
    ByteSize    7
    Parity  0
    StopBits    2
    XonChar 0 '\0'  
    XoffChar    0 '\0'  
    ErrorChar   0 '\0'  
    EofChar 0 '\0'
    EvtChar 0 '\0'
    wReserved1  0

我是否在结构中遗漏了一些可能会阻塞空字符的内容?还是有可能是我需要更改的驱动程序配置或注册表配置?

【问题讨论】:

    标签: visual-c++ serial-port


    【解决方案1】:

    您已启用 XON/XOFF 流控制并已将 null 指定为 XON/XOFF 字符。这就是为什么您看不到空数据字节的原因。您需要将 fOutXfInX 字段设置为 0 而不是 1。

    【讨论】:

    • 我对这个领域的理解有些模糊。但是如果我只是通过两条 TX/RX 线传输,那么我不能使用硬件流控制,需要使用软件流控制,这意味着我需要某种 XON/XOFF 字符。对吗?
    • 我意识到了我的问题。我没有在 ASCII(17 和 19)中使用专用的 XON/XOFF 字符,而是在创建新的 DCB 结构时不小心将它们设置为 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    相关资源
    最近更新 更多