=AK=
New member
ESP8266 работает в связке с внешним микроконтроллером, получает от него команды и обменивается данными. Все в общем-то работает, но иногда сообщения к приходят не целиком, а обрезанные.
Сообщения идут в бинарной форме с байт-стаффингом, в стиле SLIP. То есть, начало сообщения обозначается своей уникальной парой байт ("старт"), конец сообщения - своей уникальной парой ("стоп"). Сообщения имеют переменную длину, от 16 до 300 байт данных в пакете.
Изредка длинные сообщения не доходят: начало пакета и часть тела приходят, а конец сообщения где-то пропадает. В скетче я это обнаруживаю, когда вместо ожидаемого "стопа" приходит новый "старт".
Поначалу такое происходило довольно часто. Это было, когда я вычитывал побайтно в основном лупе.
После того, как стал вычитывать блоками, проблема стала появляться реже:
Сейчас ре-организовал код при помощи TickerScheduler. Раз в 1 мс запускаю задачу, которая только читает блоками из , убирает байт-стаффинг и кладет данные в буфер, больше ничего не делает. Проблема стала появляться намного реже, но иногда все же возникает.
Чаще всего режутся пакеты длиной порядка 110 байт, обрезание происходит примерно на 90-м байте. Мне это удивительно, потому что аппаратный буфер у ESP имеет длину 128 байт, плюс к этому в драйвере есть буфер 256 байт. Что за фигня такая?
Сообщения идут в бинарной форме с байт-стаффингом, в стиле SLIP. То есть, начало сообщения обозначается своей уникальной парой байт ("старт"), конец сообщения - своей уникальной парой ("стоп"). Сообщения имеют переменную длину, от 16 до 300 байт данных в пакете.
Изредка длинные сообщения не доходят: начало пакета и часть тела приходят, а конец сообщения где-то пропадает. В скетче я это обнаруживаю, когда вместо ожидаемого "стопа" приходит новый "старт".
Поначалу такое происходило довольно часто. Это было, когда я вычитывал побайтно в основном лупе.
После того, как стал вычитывать блоками, проблема стала появляться реже:
Код:
while (Serial.available() > 0)
{
ubuf_len = Serial.available();
Serial.readBytes(ubuf, ubuf_len);
... etc
}
Чаще всего режутся пакеты длиной порядка 110 байт, обрезание происходит примерно на 90-м байте. Мне это удивительно, потому что аппаратный буфер у ESP имеет длину 128 байт, плюс к этому в драйвере есть буфер 256 байт. Что за фигня такая?