а я думаю что этого камня вполне достаточно либы кривые это факт! вот скажите while (1){ port1.listen(); while (port1.available() > 0) {} port2.listen(); while (port2.available() > 0) {} port3.listen(); while (port3.available() > 0) {} } разве оно способно хоть один байт принять? мне так мыслиться что port*.available() > 0 ни когда не станет больше нуля!
Комментарии: 13
Alexander
The number of bytes available to read Слушаем порт, если в буфере больше 0 байт, то обрабатываем
Dim
отлично и как долго слушаем?
Alexander
Каждый системный тик
Dim
это не ответ как долго слушаем до переключения на другой порт? port1.listen(); while (port1.available() > 0) {}
Alexander
bool SoftwareSerial::listen() { if (!_rx_delay_stopbit) return false; if (active_object != this) { if (active_object) active_object->stopListening(); _buffer_overflow = false; _receive_buffer_head = _receive_buffer_tail = 0; active_object = this; setRxIntMsk(true); return true; } return false; }
Dim
замечательно а сколько это в микросекундах? при отсутствии даты
Alexander
Каждый системный тик, который плывет от размера программы Поэтому вы и не получите гарантии обработки посылки Только по прерыванию
Dim
но это прерывание будет сброшено когда наступит очередь: port2.listen(); while (port2.available() > 0) {} ?
Alexander
Это не прерывание
Dim
значит тут нет прерываний?
Alexander
В софт сериал нет конечно
Dim
вообще никаких? ни от таймера ни от порта? а как же это: Note: Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 Not all pins on the Leonardo support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
Anonim
Ну и жуть