[an error occurred while processing this directive]
|
Никогда не пользовался 9-м битом. А протокол делал примерно такой.
РС всегда начинает акт обмена, посылая пакет, состояний из полей:
1. Длина пакета
2. Адрес получателя
3. Команда
4. Данные (необязательно)
5. Контрольная сумма.
Прием в прерывании, оценка мне или нет. Когда принят последний байт - анализ пакета на правильность.
Если пакет правильный и мне, только тогда я отвечаю аналогичным пакетом.
Есть 2 таймаута - между байтами и ожидание ответа. Если между байтами слишком долго - считаем, что попали началом приема в середину пакета, все предыдущее - лажа, и следующий принятый байт - первый в пакете. Если контроллер слишком долго не отвечает - РС повторяет запрос.
Реальное наполнение и длина полей пакета - на твое усмотрение.
Алгоритм довольно устойчивый и хорошо себя зарекомендовал.
E-mail: info@telesys.ru