Qt串行通信库 QextSerialPort需要注意的问题 便签

来源:互联网 发布:大时代数据 编辑:程序博客网 时间:2024/06/05 08:23

通过对部分源代码的学习,发现可能遇到的问题包括以下几个,并没有进行测试:

1. 赋值运算符重载

Win_QextSerialPort& Win_QextSerialPort::operator=(const Win_QextSerialPort& s);

实现时没有采用其他构造函数开头的
Win_Handle=INVALID_HANDLE_VALUE;
语句,不知道是为什么,暂不使用此函数。

2. RTS/CTS

void Win_QextSerialPort::setFlowControl(FlowType flow)

QextSerialPort提供三种流控方式:

  1. FLOW_OFF 不使用流控
  2. FLOW_HARDWARE 硬件(RTS/CTS)流控
  3. FLOW_XONXOFF 软件(XON/XOFF)流控

RTS/CTS流控是针对数据发送的,对数据的接收没有控制

备注:
QextSerialPort对发送进行操作:

  • dcb.fOutxCtsFlow
  • dcb.fRtsControl

WINAPI还提供对接收进行操作:

  • DCB::fDtrControl
  • DCB::fDsrFlow
  • DCB::fDsrSensitivity

3. 数据位和停止位

每次修改数据位或停止位的时候都会判断是否允许转换。
如果要从8N2转换成5N1.5,必须采用8N2—>8N1—>5N1—>5N1.5的方式,因为8N1.5和5N2均不能转换成功。
由于默认的是8N1模式,因此在初始化过程中按照 先设数据位、后设停止位 的方法总是没有问题的。

4. 时限设置

void Win_QextSerialPort::setTimeout(long millisec)
没看懂这个函数的编写逻辑,估计是对WINAPI不理解的原因

5. hEvent

qint64 Win_QextSerialPort::writeData(const char *data, qint64 maxSize)
中有这样一句
overlapWrite.hEvent = CreateEvent(NULL, true, false, NULL);
建立了一个事件的句柄,然而并没有找到这个句柄在哪儿被销毁

0 0
原创粉丝点击