считывание более 8 байт с последовательного порта

#c #serial-port

#c #последовательный порт

Вопрос:

Мне нужно считывать данные с последовательного порта, но функция read () всегда возвращает 8 байт или меньше, что я могу сделать, чтобы получить все данные в коде C.:

 readbytes = read(f, bufptr, sizeof(buffer));
buffer[readbytes]='';
printf("number of bytes read is %dn", readbytes);
printf("buffer %sn", buffer);
  

Я пытаюсь использовать do while, но у меня все тот же результат.

Комментарии:

1. как определяется буфер и что выполняет отправку?

2. Если buffer это указатель, и вы используете 64-разрядную систему, то sizeof(buffer) , скорее всего, 8…

3. buffer — это массив символов (char buffer[256]), я отправляю команду на последовательное устройство и пытаюсь прочитать ответ

4. какие команды

5. проблема может возникнуть на более высоком уровне. Может быть, системе просто удобно отправлять 8 байт одновременно. Я думаю, вам нужно выполнить еще одно чтение.

Ответ №1:

[слишком долго для комментария]

Попробуйте этот код:

 char buffer[256];
memset(buffer, 0, 256);

size_t bytes_read= 0, bytes_expected = 11; 

do {
  ssize_t result = read(f, buffer   bytes_read, bytes_expected - bytes_read); 
  if (0 >= result)
  {
    if (0 > result)
    {
      perror("read()");
    }

    break;
  }

  bytes_read = resu<
} while (bytes_read < bytes_expected)

fprintf(stderr, "Read %zu out of %zu expected bytes: `%s`n", bytes_read, bytes_expected, buffer);
  

Комментарии:

1. большое спасибо alk, это может решить проблему, если точное количество ожидаемых байтов равно 11, но если количество ожидаемых байтов составляет от 5 до 11, как я могу это сделать?

2. @user1381760: считывайте один байт за другим, проверяйте, что у вас есть, и решайте, закончили ли вы с этим.