так и не проверил, вместо этого доработал фильтр заточив его на оба варианта.... по тому как поведение может менятся в зависимости от версии библиотек...
по логике терятся должны старые данные, но исходя из описания вроде-бы теряются новые.... то есть в описании написано, что peek() всегда возвращает одно и то-же пока не будет прочитан или очищен буфер...
а вообще - очень прикольно с переполнением разбиратся, реально мозг раскорячился от "симптомов"...
ps
ну вот и начались сетевые грабли, ура !!!! а еще мне что-то пришло на почту, наверно тач панели....
теперь нужен третий модуль в моей сети, два работаю как надо, надо тестить дальше на бОльших трафиках...
класс лежит в файле HardwareSerial, а во вторых я там ногу сломал... хотя и дописывал его чуток
ну ладно. вот прерывание по приему байта. сложно?
void HardwareSerial::_rx_complete_irq(void)
{
if (bit_is_clear(*_ucsra, UPE0)) {
// No Parity error, read byte and store it in the buffer if there is
// room
unsigned char c = *_udr;
rx_buffer_index_t i = (unsigned int)(_rx_buffer_head + 1) % SERIAL_RX_BUFFER_SIZE;
// if we should be storing the received character into the location
// just before the tail (meaning that the head would advance to the
// current location of the tail), we're about to overflow the buffer
// and so we don't write the character or advance the head.
if (i != _rx_buffer_tail) {
_rx_buffer[_rx_buffer_head] = c;
_rx_buffer_head = i;
}
} else {
// Parity error, read byte but discard it
*_udr;
};
}
какие данные теряются? самые старые или новые?
проверь, отправив строку "10000....00001" равную длине буфера + 1 символ.
Ставлю пятерик на то, что теряются старые.
так и не проверил, вместо этого доработал фильтр заточив его на оба варианта.... по тому как поведение может менятся в зависимости от версии библиотек...
по логике терятся должны старые данные, но исходя из описания вроде-бы теряются новые.... то есть в описании написано, что peek() всегда возвращает одно и то-же пока не будет прочитан или очищен буфер...
а вообще - очень прикольно с переполнением разбиратся, реально мозг раскорячился от "симптомов"...
ps
ну вот и начались сетевые грабли, ура !!!! а еще мне что-то пришло на почту, наверно тач панели....
теперь нужен третий модуль в моей сети, два работаю как надо, надо тестить дальше на бОльших трафиках...
а файлики serial пооткрывать и посмотреть нельзя?
а файлики serial пооткрывать и посмотреть нельзя?
ну во первых класс лежит в файле HardwareSerial, а во вторых я там ногу сломал... хотя и дописывал его чуток
а файлики serial пооткрывать и посмотреть нельзя?
Не наш метод!
класс лежит в файле HardwareSerial, а во вторых я там ногу сломал... хотя и дописывал его чуток
ну ладно. вот прерывание по приему байта. сложно?
проглядел видать... но ведь я прав оказался, теряются новые :)
Какое нахер новые? Словосочетание "кольцевой буфер" вам о чём нибудь говорит? Затираются старые данные в кольцевом буфере, внимательно смотрите код.
Какое нахер новые? Словосочетание "кольцевой буфер" вам о чём нибудь говорит? Затираются старые данные в кольцевом буфере, внимательно смотрите код.
а условие смотрел? там хвост растет только до головы, как до головы дошел - дальше все входящие данные теряются....
а условие смотрел? там хвост растет только до головы, как до головы дошел - дальше все входящие данные теряются....
Да, чего-то проглядел, старею, млять. Грешным делом думал что там честный кольцевой буфер, ан нет. Сам себе поставил минус :)