#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: считывайте один байт за другим, проверяйте, что у вас есть, и решайте, закончили ли вы с этим.