これから、シリアルポート構成の例をコピーしました。
tcgetattr (serialfd, &tty);
cfsetospeed(&tty,B115200);
cfsetispeed(&tty,B115200);
tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;
tty.c_iflag &= ~IGNBRK;
tty.c_lflag = 0;
tty.c_oflag = 0;
tty.c_cc[VMIN] = 0;
tty.c_cc[VTIME] = 5;
tty.c_iflag &= ~(IXON | IXOFF | IXANY);
tty.c_cflag |= (CLOCAL | CREAD);
tty.c_cflag &= ~(PARENB | PARODD);
tty.c_cflag |= 0;
tty.c_cflag &= ~CSTOPB;
tty.c_cflag &= ~CRTSCTS;
私の実際のコードは次のようなものです。
char buf[100];
write(serialfd, "PING", strlen("PING"));
fsync(serialfd);
while (1)
{
read(serialfd, buf, sizeof(buf));
printf("length: %d\n", strlen(buf));
}
この場合、length: 6
停止することなく無限に印刷されます。変更tty.c_cc[VMIN] = 1
しtty.c_cc[VTIME] = 0
ても読み取れない場合(ブロックインread()
)
USBからシリアルへのコンバーターでdebian6.0.5を使用しています。私はこのようにシリアルポートを開きます:
serialfd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_SYNC);