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/