blindman писал(а):Надо переключаться.
Т.е. я так понимаю, чтобы избежать неразберихи надо, чтобы один модуль периодически запрашивал другой и переходил в режим приема, затем принимал пакет очередной и т.п. Какая говоришь максимальная скорость получалась?
Предлагаю:
1. В первой версии протокола тупо фиксировать частоту в обоих модулях и работать по ней.
2. Дальше один из модулей объявляем мастером, второй подмастерьем.
3. Периодически (частоту определим исходя из ответа на вопрос ниже) происходит цикл обмена:
3.1. Мастер кидает запрос в котором выдает свой идентификатор, номер передаваемого пакета, ответ на предыдущую посылку подмастерья, количество байт в посылке, сами байты посылки (если их кол-во >0) и контрольную сумму всей посылки, после чего переходит в режим приёма.
3.2. Подмастерье принимает пакет, проверяет контрольную сумму посылки мастера, если она не битая (проверяет по контрольной сумме), кладёт пришедшие байты в буфер обмена;
3.3. Подмастерье формирует свой пакет такой же как у мастера, если еще есть шанс, что мастер не перешел в режим приёма, ждет.
3.4. Подмастерье отправляет свой пакет мастеру и переходит в режим приёма.
Если мастер или подмастерье получили ответ, что предыдущая посылка была битая или сейчас получили в ответ битый пакет, тогда они в ответ так же посылают предыдущий пакет еще раз.
Если мастер или подмастерье получили пакет с номером совпадающим с предыдущим, тогда они считают что их ответ не прошел и повторяют свой предыдущий пакет. И так каждый из них будет повторять пакет пока не получит подтверждение от другого, что пакет принят нормально.
Вроде всё.
PS: Какое там время переключения между приемом и передачей?
Добавлено спустя 11 минут 40 секунд:На будущее по поводу смены частоты можно тупой алгоритм накидать или какой-нибудь готовый способ реализовать, но не думаю что в первой версии это надо.