0

我需要在树莓派上为 UART 编写终端。这个想法是按下连接到我的树莓的键盘上的键并通过 UART 发送它,然后打印树莓通过 UART 接收到的内容。

问题出在树莓派上的回声中。我不需要这个,但我不知道如何禁用它。我使用这个功能:

int kbhit(void)
{
    struct termios oldt, newt;
    int ch;
    int oldf;

    tcgetattr(STDIN_FILENO, &oldt);
    newt = oldt;
    newt.c_lflag &= ~(ICANON | ECHO);
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);
    oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
    fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
    ch = getchar();
    tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
    fcntl(STDIN_FILENO, F_SETFL, oldf);
    if(ch != EOF)
    {
        return ch;
    }
    return 0;
}

有时没有回声。

例如我的输入是:abcdefgh
但程序返回给我这个:abbccddeefghh

4

1 回答 1

0

我刚刚评论了一行

tcsetattr(STDIN_FILENO, TCSANOW, &oldt);

它在没有回声的情况下工作。看起来负责清除回声的东西几乎没有时间去做。

于 2013-11-15T21:47:47.280 回答