Интервал между приемом посылок по UART
- Войдите на сайт для отправки комментариев
Пнд, 19/03/2018 - 16:09
Не могу найти вразумтельного ответа на вопрос - какое время (тайм-аут) необходим при посылке данных на Ардуино-Мега по UARTу? С какой частотой необходимо передавать посылки , что бы порт не захлебывался на скорости 57600 Бод?
С какой частотой необходимо передавать посылки , что бы порт не захлебывался на скорости 57600 Бод?
Чтобы порт не захлёбывался на скорости 57600, нужно передавать на скорости 57600.
А вот чтобы не захлёбывалась Ваша программа приёма - это зависит от неё, что она у Вас там делает, как принимает, чем ещё занимается - этого никто, кроме Вас, не знает.
Угу. Программа только и делает, что передает по УАРТу байты и принимает.
Достаточно ли будет минимальной задержки (одного стопового бита) между посылками(10 бит)?
Есть бассейн. По одной трубе вливается пиво, по другой отпивается. Что делать чтоб бассейн не переполнился? Пить не мендленее чем вливают. Так и с сириалом, извлекайте данные не медленей чем они поступают и будет нормас. Если 57600 скорость, то при одном стоповом скорость вливания 5760 байт/сек. И извлекать надо не медленей чем с такой соростю.
Угу. Там ещё буфер приемный есть, в бассейне. Ладно, разберемся.
Приемный буфер - это и есть бассейн.
И передающий, кстати, - тоже.
Другими словами: при передаче нужно следить за тем, чтобы не заполнять буфер быстрее, чем осуществляется передача, а при приеме - наоборот, опустошать буфер надо не медленнее, чем приходят данные.
Так и есть! Емкость буфера по умолчанию - 64 байта. И этого вполне достаточно для серии приходящих 12 байт, друг за другом. Оконечное устройство может "выпуливать" их с защитным интервалом в 1-1,5 стопового бита. Вопрос пока теоретический - скорость обработки "ПО Ардуино" буфера достаточна по умолчанию для минимального защитного интервала между посылками?
Через неделю надо будет практические исследования проводить. Как самый тяжелый случай, придется лезть в теорию и библиотеки - как там организован буфер для приема/передачи, прерывания, задержки...
Тебе, в #1, русским-по-белому написали, что это зависит только от скорости обработки твоей программы. Скорости контроллера на изъятие из буфера хватит всегда, при любых обстоятельствах. "Узким местом" может быть только твоя обработка.
Кроме того, при помощи serialEvent(), ты можешь себе сделать буфер хоть на всю память.
О це дывный ответ! Давно бы так! Спасибо!
...бардзо проше