|
быстрый алгоритм, определения отсуствующего байта произвольного массива байтов размером |
|
|
|
 |
Ответов
|
Jun 4 2007, 15:29
|
Участник

Группа: Свой
Сообщений: 69
Регистрация: 16-10-05
Пользователь №: 9 713

|
Цитата(sergeeff @ Jun 3 2007, 21:51)  При чисто двоичной передаче данных со всякими преамбулами вначале и crc в конце все отлично, до тех пор пока не имеет место выпадение байта из середины. Что может быть в практической жизни запросто. При этом может накрыться вся идеология разборки пакета. Какая идеология разборки пакета может накрыться??? Выпадение байта (равно как и его искажение при приеме) просто приведут к тому, что что-то не сойдется. Ведь, кроме CRC, может не сойтись межбайтная пауза (ее обрабатывать просто необходимо), сигнатура конца пакета и пр. Инициатор пакета не дождется ответа и просто его повторит. А если ошибок так много, что и в повторных пакетах есть ошибки, то скорее всего у Вас проблема с железом. Цитата(tag @ Jun 4 2007, 14:48)  ...для чего и придумали crc и приамбулу... и в целом протокол обмена ...еще один вариант оформления пакета, здесь пример:
55h 0aah 86h 6h 18h 55h 55h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55h 5ah 55h 0aah - маркер начала, 55h 5ah - маркер конца, если внутри пакета встречается байт с кодом 55h то он дублируется, т.е. в случае когда весь пакет содержит 55h его реальная длина будет в два раза больше. В примере выше содержимое пакета будет 86h 6h 18h 55h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0... Дело в том, что мне кажется, что надежность такой структуры пакета чуть неоптимальна. Добавление своих символов в полезные данные (т.е. зависимость по данным) в некоторых случаях может создавать некоторую избыточность информации в пакете. ИМХО, лучше ее (и не только) направить на более полезные нужды, чем просто передача информации. К тому же, все равно необходимо контроллировать целостность данных (CRC), иногда требуется передать некоторую дополнительную информацию, например, о назначении пакета, некоторые метаданные и др. В любом случае такой подход имеет право на жизнь, все ведь зависит от задачи. Не так ли?
|
|
|
|
|
Jun 4 2007, 15:29
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(ANV @ Jun 4 2007, 18:09)  Какая идеология разборки пакета может накрыться??? Вся простота "решения" c передачей размера и пойдет лесом при сбое связанном с потерей байта. Старт следующего пакета при работе без пауз между пакетами уже не поймаете, дальше возможнfа ложная ловля преамбулы и понеслось...... Даже если пакеты идут с паузами и квитированием каждого, то на всю эту "красоту" надо вешать механизм таймаутов, согласовывать их величину на обеих стронах... Цитата Выпадение байта (равно как и его искажение при приеме) просто приведут к тому, что что-то не сойдется. Ага, а после этого предстоит "просто" искать начало целого пакета в приходящем потоке, причем в обе стороны, при этом раздувая для этого буфера и тратя огромное по сравнению с нормальным режимом приема время. И/Или гарантировано терять несколько пакетов. Это называется "кривизна"  и обвешивание изначально ущебного механизма всякими "преамбула2" и вообще уже максимально бесполеным "концом пакета" ничего принципиально изменить не могут. Если делать нормально работающие процедуры передачи по последовательным каналам, то только на механизмах бит/байт стаффинга.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 4 2007, 17:11
|
Участник

Группа: Свой
Сообщений: 69
Регистрация: 16-10-05
Пользователь №: 9 713

|
Цитата(zltigo @ Jun 4 2007, 18:29)  Вся простота "решения" c передачей размера и пойдет лесом при сбое связанном с потерей байта. Старт следующего пакета при работе без пауз между пакетами уже не поймаете, дальше возможнfа ложная ловля преамбулы и понеслось...... Даже если пакеты идут с паузами и квитированием каждого, то на всю эту "красоту" надо вешать механизм таймаутов, согласовывать их величину на обеих стронах...
Ага, а после этого предстоит "просто" искать начало целого пакета в приходящем потоке, причем в обе стороны, при этом раздувая для этого буфера и тратя огромное по сравнению с нормальным режимом приема время. И/Или гарантировано терять несколько пакетов. Все это красиво конечно, но к сожалению бессмысленно, если уточнить, что такой протокол создан/используется для работы в режиме "запрос-ответ". Вас что-то не устраивает? Вспомните вопрос автора, для чего "мы здесь все собрались". Цитата(zltigo @ Jun 4 2007, 18:29)  Это называется "кривизна"  и обвешивание изначально ущебного механизма всякими "преамбула2" и вообще уже максимально бесполеным "концом пакета" ничего принципиально изменить не могут. Вы можете характеризовать что угодно и какими угодно словами, но, пожалуйста, добавляйте волшебное слово "ИМХО". Бесполезный "конец пакета" совсем не бесполезный как Вы думаете. К тому же эта сигнатура используется не только в моем примере структуры протокола, посмотрите на другие протоколы. Цитата(zltigo @ Jun 4 2007, 18:29)  Если делать нормально работающие процедуры передачи по последовательным каналам, то только на механизмах бит/байт стаффинга. И это все про COM порт? Или Вы отвечаете на какой-нибудь другой, абстрагированный от этой темы, вопрос типа - "Ребята! А как сделать это по самому правильному"? Вы пытаетесь помочь автору этого топика, т.к. проблема была/есть только у него? Вы знаете что конкретно ему нужно? Тут тоже бы ИМХО добавить. з.ы. Ничего личного.
|
|
|
|
|
Jun 4 2007, 20:54
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(ANV @ Jun 4 2007, 20:11)  добавляйте волшебное слово "ИМХО". В данном случае не буду  , ибо описанное есть объективная реальность. Цитата Бесполезный "конец пакета" совсем не бесполезный как Вы думаете. К тому же эта сигнатура используется не только в моем примере структуры протокола, посмотрите на другие протоколы. Я говорю о бесполезности в предложенном Вами протоколе а не о бесполезности для правильных протоколов в которых не передается размер в явном виде, но задаются уникальные разделители фреймов. Для Вашего протокола это может называться байтом заполнителем (и не контролироваться), тогда от него будет польза в качестве эаполнителя потерянного (потерянных) информациионных байтов до размера указанного в Вашем заголовке. Цитата И это все про COM порт? Да, про COM за которым находится не только метровый кусок кабеля, но и оборудование передачи даных по произвольным каналам. Цитата Вы знаете что конкретно ему нужно? Нет, Но я знаю, что НЕ нужно - не нужна передача даных в паркетных условиях. Цитата з.ы. Ничего личного. Естественно! Цитата(SasaVitebsk @ Jun 4 2007, 22:51)  Пакеты (типовые уже были расписаны) нумеруются псевдослучайным образом. Зачем? Зачем? Псевдослучайность для данного применения хуже обычной последовательной нумерации переданных пакетов! Для непрягающего подтверждения хорошо годится введение номера последнего принятого пакета в заголовок с целью частичной замены отдельного пакета для подтверждения. Заодно вкупе с номером переданного получается приличный иденификатор конкретного пакета. Для заметного увеличения пропускной способности канала при наличии подтверждений классически применяются 'sliding windows' (смотрите TCP). Применение протоколов только с Neganive Acknowledgment черевато тем, что осутвующий намертво адресат не идентифицируется.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
sKWO быстрый алгоритм Jun 1 2007, 10:57 GetSmart Совершенно непонятны условия задачи. Опишиде более... Jun 1 2007, 11:30 sKWO Цитата(GetSmart @ Jun 1 2007, 14:30) Масс... Jun 1 2007, 11:37  =GM= Цитата(sKWO @ Jun 1 2007, 09:57) Нужно на... Jun 1 2007, 12:20 GetSmart Два или более одинаковых значений в массиве допуск... Jun 1 2007, 11:47 sKWO Цитата(GetSmart @ Jun 1 2007, 14:47) Два ... Jun 1 2007, 12:30  defunct Цитата(sKWO @ Jun 1 2007, 15:30) Что дума... Jun 1 2007, 12:49   GetSmart Цитата(defunct @ Jun 1 2007, 18:49) Я дум... Jun 1 2007, 12:50    defunct Цитата(GetSmart @ Jun 1 2007, 15:50) Дык ... Jun 1 2007, 12:52  ANV Цитата(sKWO @ Jun 1 2007, 15:30) Товарищ ... Jun 3 2007, 15:01 defunct Хеш функция для поиска байта, это нечто из серии- ... Jun 1 2007, 11:58 GetSmart Во время подготовки пакета к отправке из МК один р... Jun 1 2007, 12:43 sKWO Цитата(GetSmart @ Jun 1 2007, 15:43) Во в... Jun 1 2007, 12:55 add ЦитатаРезультирующий пакет выглядит так:0x55, 0xAA... Jun 1 2007, 12:44 GetSmart Можно же и 256 байт в пакете использовать. То есть... Jun 1 2007, 12:46 add ЦитатаМожно же и 256 байт в пакете использовать. Т... Jun 1 2007, 12:50 GetSmart Цитата(add @ Jun 1 2007, 18:50) Дык я уже... Jun 1 2007, 12:54  defunct Цитата(GetSmart @ Jun 1 2007, 15:54) И та... Jun 1 2007, 13:25   sKWO Цитата(defunct @ Jun 1 2007, 16:25) Конеч... Jun 1 2007, 19:29    haker_fox Цитата(sKWO @ Jun 2 2007, 04:29) Ценю чув... Jun 2 2007, 07:26  ReAl Цитата(GetSmart @ Jun 1 2007, 15:54) И та... Jun 1 2007, 14:58 GetSmart Цитата(add)Дык я уже говорил комбинация байт.после... Jun 1 2007, 12:58 bzx 2 sKWO
Измени структуру кадра передачи. Например, ... Jun 1 2007, 13:06 _artem_ посмотрите в сторону битстаффинга. Пример - сигна... Jun 1 2007, 14:36 _artem_ ну пускай тогда символьно передает, или сделает фр... Jun 1 2007, 15:06 Dr.NoA Полагаю, что для Вас в самый раз будет алгоритм by... Jun 1 2007, 15:31 add Цитата"Кривизна" протокола вносит ограни... Jun 2 2007, 08:30 GetSmart Цитата(add)про контрольную сумму забыли? чтоб еще ... Jun 2 2007, 10:04 defunct Цитата(GetSmart @ Jun 2 2007, 13:04) Да н... Jun 2 2007, 12:20 sergeeff Народ давно уже придумал способы передачи двоичных... Jun 2 2007, 16:27 tag Цитата(sergeeff @ Jun 3 2007, 21:51) При ... Jun 4 2007, 11:48     ANV Цитата(zltigo @ Jun 4 2007, 23:54) В данн... Jun 4 2007, 21:39      zltigo Цитата(ANV @ Jun 5 2007, 00:39) И какую ж... Jun 4 2007, 22:28  tag Цитата(ANV @ Jun 4 2007, 18:29) Какая иде... Jun 5 2007, 05:27 SasaVitebsk Практически всё упомянули. И похоже парня совсем п... Jun 4 2007, 19:51 sergeeff Что-то у наших коллег вместо разумной аргументации... Jun 5 2007, 05:55 SasaVitebsk Всётаки считаю что протокол может усложнятся донел... Jun 5 2007, 16:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|