Чтение из последовательных данных длина всегда 1 - PullRequest
1 голос
/ 03 марта 2020

Попытка чтения байтов из последовательного в буфер:

char buf[512];
if (int len = Serial.readBytes(buf, 512) > 0)
{
   DEBUG_LOGF("got bytes available=%d", len);
}else
{
   DEBUG_LOG("nothing read");
}

Я всегда получаю 1 в len, даже при отправке данных была длинная строка. Странно то, что я нашел целые длинные строковые данные в buf, тогда как у меня все еще есть len==1.

Почему? Как это исправить?

1 Ответ

1 голос
/ 03 марта 2020

Это из-за приоритета оператора .

Выражение int len = Serial.readBytes(buf, 512) > 0 действительно равно int len = (Serial.readBytes(buf, 512) > 0).

То есть вы присвойте результат сравнения Serial.readBytes(buf, 512) > 0 переменной len.

Вам нужно разделить определение переменной и присвоение ей и использовать скобки для получения правильного приоритета:

char buf[512];
int len;
if ((len = Serial.readBytes(buf, 512)) > 0)
...