Linux版本:4.9.59

平台:Raspberry Pi 3 Model B

USB转串口:FTDI4232

我希望从计算机中读取一大块数据(大约4096字节)。所有可打印数据均为ASCII格式。
数据连续传输一次。用户按下数据传输按钮后。此操作每30分钟进行一次。
数据包含多个CR LF。

我已将串行端口配置为RAW输入模式。

config.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOE);
this->minChars = 5000;
this->timeOut = 100000;
if(this->timeOut > 0)
    config.c_cc[VTIME] = this->timeOut;
else
    config.c_cc[VTIME] = 0;

if(this->minChars > 0)
    config.c_cc[VMIN] = this->minChars;
else
    config.c_cc[VMIN] = 0;




阅读功能:

ready = epoll_wait(this->epfd, &this->events, 1, this->ePollTimeout);
returnVal = read(this->fd, readDataBuffer, 8192);


但是,当我从串行端口读取时,系统将传入的Blob分成多个数据包,并且某些数据包丢失了。

例如。 :我发送了278个字节的数据。
系统将其分为3个随机长度的数据包。每次执行时,数据包的长度都会有所不同。
好心劝告。

最佳答案

read最多可以读取您提供的字节数,但不能保证实际会读取很多字节。 read的返回值是实际读取的字节数。通常,将读取的系统调用放在while循环中,直到实际读取所需的字节数,发生错误或到达文件/流的末尾为止。

http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html

关于c++ - Linux串行端口RAW模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47606191/

10-12 01:03