(Borland C++Builder 6) [Статья 6] (TxRxV1)(SLIP)(ESC)(ESC)(Обмен)(Протокол)(C/C++)

| 01.02.2016

Протокол  SLIP (Serial Lines Internet Protocol)

Описание:
Каждый протокол обладает свойством инкапсулировать данные. Протокол SLIP использует специальные символы для ограничения кадра данных в последовательном канале. Для того чтобы распознать границы SLIP-кадров, передаваемых по последовательной линии связи, и отделить один кадр от другого, протокол SLIP предусматривает использование специального символа END, значение которого в шестнадцатеричном представлении равно C0. Применение специального символа может породить конфликт: если байт пересылаемых данных тождественен символу END, то он будет ошибочно определен как признак конца кадра. Чтобы предотвратить такую ситуацию, байт данных со значением, равным значению символа END, заменяется составной двухбайтовой последовательностью, состоящей из специального символа ESC (DB) и кода DC. (Применяемый в протоколе SLIP символ ESC, не равный символу ESC в кодировке ASCII, будем обозначать SLIP ESC.) Если же байт данных имеет тот же код, что и символ SLIP ESC, то он заменяется двухбайтовой последовательностью, состоящей из собственно символа SLIP ESC и кода DD. После последнего байта пакета передается символ END.

Примеры кодировки:
Передаваемые данные:  0×01, 0×02, 0×03, 0×04, 0×05. 
Кодированные данные:  0xC0, 0×01, 0×02, 0×03, 0×04, 0×05, 0xC0.
(*добавили 0xc0 в начале и конце)

Передаваемые данные:  0×01, 0×02, 0xC0, 0×04, 0×05. 
Кодированные данные:  0xC0, 0×01, 0×02, 0xDB, 0xDC, 0×04, 0×05, 0xC0.
(*добавили 0xc0 в начале и конце)(*есть символ в данных который нужно закодировать)

Передаваемые данные:  0×01, 0×02, 0xDB, 0×04, 0×05. 
Кодированные данные:  0xC0, 0×01, 0×02, 0xDB, 0xDD, 0×04, 0×05, 0xC0. 
(*добавили 0xc0 в начале и конце)(*есть символ в данных который нужно закодировать)

Статьи в помощь :
(Borland C++Builder 6) [Статья 3] (ПК)(COM)(FT232RL)(USB)(UART)(C/C++)
Подключение avr микроконтроллера к компьютеру(FT232RL)
(Урок_11) Первое оконное приложение (TForm) (C/C++)

Это часть цикла взаимосвязанных статей TxRxV1:
1) (Borland C++Builder 6) [Статья 6] (TxRxV1)(SLIP)(ESC)(ESC)(Обмен)(Протокол)(C/C++)
2) (Borland C++Builder 6) [Статья 7] (TxRxV1)(FTDI)(ftd2xx)(FT_Write)(FT_Read)(Обмен)(C/C++)
3) (Borland C++Builder 6) [Статья 8] (TxRxV1)(CRC)(Контрольная сумма)(Обмен)(C/C++)
4) (Borland C++Builder 6) [Статья 9] (TxRxV1)(Канал)(Протокол)(Связь)(Обмен)(C/C++)
5) (Borland C++Builder 6) [Статья 10] (TxRxV1)(FILE)(Process)(Tread)(stdio)(C/C++)
6) (Borland C++Builder 6) [Статья 11] (TxRxV1)(Driver)(Поток)(Параллелизм)(stdio)(C/C++)
7) (Borland C++Builder 6) [Статья 12] (TxRxV1)(Buf)(FIFO)(LIFO)(Pocket)(C/C++)
8) (Borland C++Builder 6) [Статья 13] (TxRxV1)(TestUse)(AVR)(uart)(Tx/Rx)(C/C++)
9) (Borland C++Builder 6) [Статья 14] (TxRxV1)(TestUse)(STM32)(uart)(Tx/Rx)(C/C++)

 

Библиотека (СКАЧАТЬ ПРОЕКТ) + (RISE COMPONENT):
1) Для практического применения принципов кодирования по протоколу SLIP была написана библиотека SLIP_V2.h
2) Для упрощения адаптации библиотеки к другим платформам, библиотека написана с использованием заранее однозначно определенными типами переменных описанных в файле TPDF.h
3) Библиотека в своем составе имеет пример практического применения построенного конечного автомата (он же машина состояний) Это во второй части библиотеки. Для его реализации мы использовали структуру “TpDef_Slip_Rx” и ф-ии:   “SLIP_RxMashin” , “SLIP_RxMashin_IRQ” ,  “SLIP_RxMashin_Init”.
Этот подход предоставляет возможность последующего наслоения операций для последовательного раскодирования приходящих данных и вычленение пакетов из потока данных.
4) Возможны проблемы компиляции скаченного проекта, если у вас не установлены RISE компоненты в Bilder6. Можно их установить, добавлю в архив на скачивание или пере собрать проект у себя.

SLIP_V2.h:

SLIP_V2.cpp:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *