我的嵌入式Linux机箱有2个串口应用程序,它用包裹电缆测试所有串口(只有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));
在此之后,SOMETIMES(我的意思是在应用程序的一些运行中)下一个写操作块!
任何建议都将受到高度赞赏。
答案 0 :(得分:0)
首先,getty
进程的死亡应立即由其父级init
或BusyBox
的一个方面获得,然后重新启动。需要多长时间可以变化,但通常很快。但这不应影响写入端口。
你怎么知道写的阻塞?请显示该代码。