我正在开发一个软件,我必须通过串口接收数据。我在规范模式下打开端口并将VEOL标志设置为 0X78 (十六进制)。我面临的问题是每次接收到字节值 0X0A 时读取都会退出。有人可以帮我解决这个问题,我希望读取阻塞直到我收到结束字节为 0X78 。这是我到目前为止编写的代码
struct termios tio;
char buf[255];
int fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY);
if (fd <0) {
perror(MODEMDEVICE);
exit(−1);
}
bzero(&tio, sizeof(tio));
tio.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
tio.c_iflag = IGNPAR;
tio.c_oflag = 0;
tio.c_lflag = 1;
tio.c_cc[VEOL] = 0X78;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&tio);
int read=read(fd,buf,255);
printf("Number of bytes read is %d\n",read);
提前谢谢。
答案 0 :(得分:0)
VEOL(0,NUL)附加行尾字符(EOL)。认可 设置ICANON时。
因此,它不会替换所有行尾字符,它只会增加一个,这意味着0xa仍处于活动状态。
请勿发送错误的数据,或将其过滤掉。