Posix Serial Port Raw Прочитать висит - PullRequest
0 голосов
/ 13 мая 2019

Я тестирую приложение UART на BeagleBone Black, и когда я пытаюсь читать с устройства, оно блокируется навсегда.А запись работает нормально.Я подключил логический анализатор для проверки линии, и я вижу, что данные передаются и принимаются, но он всегда блокирует чтение.

int main() {
  int res;
  struct termios tty;
  memset(&tty, 0, sizeof(tty));
  int serial = open("/dev/ser2", O_RDWR | O_NOCTTY);
  if (!isatty(serial))
    return false;
  // Setting the Baud rate
  cfsetispeed(&tty, B9600);
  cfsetospeed(&tty, B9600);
  // 8N1 Mode
  tty.c_cflag &= ~PARENB;
  tty.c_cflag &= ~CSTOPB;
  tty.c_cflag &= ~CSIZE;
  tty.c_cflag |= CS8;
  tty.c_cflag &= ~CRTSCTS;
  tty.c_cflag |= CREAD | CLOCAL;
  tty.c_iflag &= ~(IXON | IXOFF | IXANY);

  tty.c_iflag &= ~(ICANON | ECHO | ECHOE | ECHONL | ISIG);
  tty.c_oflag &= ~OPOST;

  tty.c_cc[VMIN] = 1;
  tty.c_cc[VTIME] = 0;
  if ((tcsetattr(serial, TCSANOW, &tty)) != 0)
    return false;
  if ((tcflush(serial, TCIOFLUSH)) != 0)
    return false;

  while (1)
  {
    uint8_t wrBuff[3] = {0xAA, 0xBB, 0xCC};
    uint8_t res = write(serial, wrBuff, 3);
    printf("Write = %d", res);
    res = read(serial, wrBuff, 3);
    printf("Read = %d", res);
  }
  return 0;
}

Я попытался исправить, упомянутые в комментариях ниже, в отношении неверный флаг установлен , но это не решило проблему.

...