libserial接收到的数据序列错误
wrong sequence of libserial received data
我现在正在做一个项目,该项目使用libserial在Ubuntu下进行串行端口通信。我们修改了libserial源代码以允许MARK/SPACE奇偶校验。但在进行数据接收测试时,有时(约5%的可能性)传入的数据序列是错误的。第一个字节可以跳到传入缓冲区的中间,甚至可以跳到末尾。
问题出现在原始SerialPort::SerialPortImpl::HandlePosixSignal( int singnalNumber) f
函数内部,当发生错误时,它无法正确读取某些字节,错误描述为"资源暂时不可用"。但是,既然它已经使用ioctl获得了num_of_bytes_available
,那么怎么可能失败呢?
在测试过程中,我经常在MARK/SPACE奇偶校验之间切换。这会造成问题吗?
SetParity
函数中的修改部分
for **PARITY_SPACE**
port_settings.c_cflag |= CMSPAR | PARENB;
port_settings.c_cflag &= ~PARODD;
port_settings.c_iflag = 0;
for **PARITY_MARK**
port_settings.c_cflag |= CMSPAR | PARENB;
port_settings.c_iflag = 0;
好吧,我终于找到了问题的原因。libserial
SerialPort
类不是线程安全的。POSIX信号可能与提升线程冲突。我能够通过切换到SerialStream
类来解决这个问题。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 使用 char* 存储数据和产生的错误
- Static_cast转换为错误的数据类型,但结果仍然正确?
- 创建服务失败0x6f7存根收到错误数据
- 通过 host() 从 af::array 检索数据会导致错误的数据
- OpenCV C++ 3 维垫数据访问错误值
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 错误 - 自定义数据类型作为有效负载,带有提升::几何
- C 如何忽略错误数据输入
- C ++编译指示OMP分割错误(数据竞争?)与数组
- C++ mac OS X El Capitan上的openmp,Valgrind错误(数据竞赛)
- 通过结构指针访问结构变量分配错误数据
- 我该怎么做 throw 来处理 C++ 中的错误数据类型
- C++:模拟餐饮公司计费程序-无法将错误数据输出到错误文件
- 使用boost::asio套接字接收错误数据
- 读取位图图像时获取错误数据
- 来自cudaMemcpy2D的错误数据
- VS2010 x64:64位平台VS2010中包含错误数据的对象数组
- c++ fstream输出错误数据