我有带有 2 个串行端口应用程序的嵌入式 linux 盒子,它使用缠绕电缆测试所有串行端口(只有 Rx 连接到 Tx,没有其他引脚)。第二个(非控制台)端口工作正常。第一个(控制台)端口有时可以工作,但有时会做一些无法解释的事情。为了测试第一个通道,我在打开它之前杀死了运行“getty”。重生也是被禁止的。然后我执行以下操作:
system("killall getty");
Sleep(1000);
if ((fd = open(Name, O_RDWR | O_NOCTTY | O_NONBLOCK)) <= 0)
MsgFatal("Serial '%s' open error %d.", Name, errno);
BRN = B115200;
tcgetattr(fd, &Opts);
cfsetispeed(&Opts, BRN);
cfsetospeed(&Opts, BRN);
cfmakeraw(&Opts);
Opts.c_cflag |= PARENB;
Opts.c_cflag |= PARODD;
Opts.c_cflag &= ~CSTOPB;
Opts.c_cflag &= ~CRTSCTS; /* no HW flow control */
Opts.c_cflag |= CLOCAL | CREAD;
tcsetattr(fd,TCSANOW,&Opts));
在此之后,有时(我的意思是在应用程序的某些运行中)下一个写操作阻塞!
任何建议将不胜感激。