Короче говоря, столкнулся с такой проблемой (которой раньше я не замечал): при выводе в терминал (обычный Serial.write(…) ) иногда рандомно теряет какие-то слова или по нескольку слов. Буквы по отдельности не теряются.
Пример: вывожу буфер, 1кб, состоит он из обычнх строчек, 80 символов длиной, \r\n на конце. Сами строчки - это текст на английском, help page. Иногда может потеряться строчка целиком, иногда - одно или несколько слов. Иногда - сиволы \r\n теряются.
Например, вместо
Hello dear Santa!
I am writing to you to say
that you are
Будет выведено
Santa!
I am writing to you to say
that are
Сделал тест:
Выводил один и тот же буфер просто в цикле for. После вывода стоит задержка и Serial.flush(). Не помогает. Из десяти попыток - 6 раз выводится без искажений, а 4 с рандомными искажениями. Всегда в разных местах.
С досады переписал функцию вывода - теперь, если буфер больше 128 байт, то он нарезается на кусочки:
Было:
// Send characters to user terminal
//
extern "C" int console_write_bytes(const void *buf, size_t len) {
return Serial.write((const uint8_t *)buf, len);
}
Стало:
// Send characters to user terminal
//
extern "C" int console_write_bytes(const void *buf, size_t len) {
size_t len0 = len;
while (len > 128) {
Serial.flush();
Serial.write((const uint8_t *)buf, 128);
buf += 128;
len -= 128;
}
Serial.flush();
Serial.write((const uint8_t *)buf, len);
return len0;
}
Заработало. Но, извините, так же не должно быть. Никто с таким не сталкивался? Это какие-то ограничения буфера передачи? Выглядит как бага.