0

我有带有 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));

在此之后,有时(我的意思是在应用程序的某些运行中)下一个写操作阻塞!

任何建议将不胜感激。

4

1 回答 1

0

首先,一个getty进程的死亡应该立即由它的父进程收割,或者是它init的一个方面BusyBox,然后重新启动。需要多长时间可能会有所不同,但通常很快。但这不应该影响对端口的写入。

你怎么知道写被阻塞了?请显示该代码。

于 2013-06-23T15:27:52.013 回答