Почему-то никто пока не вспомнил о самом главном - возможном несовпадении скоростей удалённого и своего локального передатчиков. UART, например сохраняет работоспособность при рассогласовании скоростей до 4%.
Рассмотрим самый тяжёлый случай, когда удалённый передатчик немного быстрее. При непрерывном потоке входящих данных неизбежно будет накапливаться рассогласование. Понятно, что такая система сможет работать без потери данных только если во входящем потоке будут присутствовать паузы, позволяющие компенсировать рассогласование. Накапливающиеся "лишние" байты придётся временно сохранять в FIFO буфере. Несложно прикинуть необходимый для этого размер буфера - максимальная длина пакета умножить на максимальное относительное отклонение скоростей. Для того-же UART-а потребуется буфер размером порядка 5% (чтобы уж наверняка хватило) от максимального размера пакета.
Известные реализации (большинство из них) могут работать когда и запись и извлечение из буфера производится в обработчиках прерываний, при условии что этим прерываниям назначены приоритеты из одной группы (важно для кортексов-М), так что они не смогут прерывать друг друга.
--------------------
Russia est omnis divisa in partes octo.
|