реклама на сайте
подробности

 
 
> быстрый алгоритм, определения отсуствующего байта произвольного массива байтов размером
sKWO
сообщение Jun 1 2007, 10:57
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Нужно найти значение которого нету в списке.
Где-то пробегала мысль нащёт хэш функции, но немогу вспомнить где я ёё видел.

Сообщение отредактировал sKWO - Jun 1 2007, 10:59


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Jun 3 2007, 18:51
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



При чисто двоичной передаче данных со всякими преамбулами вначале и crc в конце все отлично, до тех пор пока не имеет место выпадение байта из середины. Что может быть в практической жизни запросто. При этом может накрыться вся идеология разборки пакета.
Go to the top of the page
 
+Quote Post
ANV
сообщение Jun 4 2007, 15:29
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 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), иногда требуется передать некоторую дополнительную информацию, например, о назначении пакета, некоторые метаданные и др.

В любом случае такой подход имеет право на жизнь, все ведь зависит от задачи. Не так ли?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 4 2007, 15:29
Сообщение #4


Гуру
******

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



Цитата(ANV @ Jun 4 2007, 18:09) *
Какая идеология разборки пакета может накрыться???

Вся простота "решения" c передачей размера и пойдет лесом при сбое связанном с потерей байта.
Старт следующего пакета при работе без пауз между пакетами уже не поймаете, дальше возможнfа ложная ловля преамбулы и понеслось...... Даже если пакеты идут с паузами и квитированием каждого, то на всю эту "красоту" надо вешать механизм таймаутов, согласовывать их величину на обеих стронах...
Цитата
Выпадение байта (равно как и его искажение при приеме) просто приведут к тому, что что-то не сойдется.

Ага, а после этого предстоит "просто" искать начало целого пакета в приходящем потоке, причем в обе стороны, при этом раздувая для этого буфера и тратя огромное по сравнению с нормальным режимом приема время. И/Или гарантировано терять несколько пакетов.
Это называется "кривизна" sad.gif и обвешивание изначально ущебного механизма всякими "преамбула2" и вообще уже максимально бесполеным "концом пакета" ничего принципиально изменить не могут.
Если делать нормально работающие процедуры передачи по последовательным каналам, то только на механизмах бит/байт стаффинга.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ANV
сообщение Jun 4 2007, 17:11
Сообщение #5


Участник
*

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



Цитата(zltigo @ Jun 4 2007, 18:29) *
Вся простота "решения" c передачей размера и пойдет лесом при сбое связанном с потерей байта.
Старт следующего пакета при работе без пауз между пакетами уже не поймаете, дальше возможнfа ложная ловля преамбулы и понеслось...... Даже если пакеты идут с паузами и квитированием каждого, то на всю эту "красоту" надо вешать механизм таймаутов, согласовывать их величину на обеих стронах...

Ага, а после этого предстоит "просто" искать начало целого пакета в приходящем потоке, причем в обе стороны, при этом раздувая для этого буфера и тратя огромное по сравнению с нормальным режимом приема время. И/Или гарантировано терять несколько пакетов.


Все это красиво конечно, но к сожалению бессмысленно, если уточнить, что такой протокол создан/используется для работы в режиме "запрос-ответ". Вас что-то не устраивает?

Вспомните вопрос автора, для чего "мы здесь все собрались".


Цитата(zltigo @ Jun 4 2007, 18:29) *
Это называется "кривизна" sad.gif и обвешивание изначально ущебного механизма всякими "преамбула2" и вообще уже максимально бесполеным "концом пакета" ничего принципиально изменить не могут.


Вы можете характеризовать что угодно и какими угодно словами, но, пожалуйста, добавляйте волшебное слово "ИМХО".

Бесполезный "конец пакета" совсем не бесполезный как Вы думаете. К тому же эта сигнатура используется не только в моем примере структуры протокола, посмотрите на другие протоколы.

Цитата(zltigo @ Jun 4 2007, 18:29) *
Если делать нормально работающие процедуры передачи по последовательным каналам, то только на механизмах бит/байт стаффинга.

И это все про COM порт? Или Вы отвечаете на какой-нибудь другой, абстрагированный от этой темы, вопрос типа - "Ребята! А как сделать это по самому правильному"? Вы пытаетесь помочь автору этого топика, т.к. проблема была/есть только у него? Вы знаете что конкретно ему нужно?
Тут тоже бы ИМХО добавить.

з.ы. Ничего личного.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 4 2007, 20:54
Сообщение #6


Гуру
******

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



Цитата(ANV @ Jun 4 2007, 20:11) *
добавляйте волшебное слово "ИМХО".

В данном случае не буду smile.gif, ибо описанное есть объективная реальность.
Цитата
Бесполезный "конец пакета" совсем не бесполезный как Вы думаете. К тому же эта сигнатура используется не только в моем примере структуры протокола, посмотрите на другие протоколы.

Я говорю о бесполезности в предложенном Вами протоколе а не о бесполезности для правильных протоколов в которых не передается размер в явном виде, но задаются уникальные разделители фреймов. Для Вашего протокола это может называться байтом заполнителем (и не контролироваться), тогда от него будет польза в качестве эаполнителя потерянного (потерянных) информациионных байтов до размера указанного в Вашем заголовке.
Цитата
И это все про COM порт?

Да, про COM за которым находится не только метровый кусок кабеля, но и оборудование передачи даных по произвольным каналам.
Цитата
Вы знаете что конкретно ему нужно?

Нет, Но я знаю, что НЕ нужно - не нужна передача даных в паркетных условиях.
Цитата
з.ы. Ничего личного.

Естественно!



Цитата(SasaVitebsk @ Jun 4 2007, 22:51) *
Пакеты (типовые уже были расписаны) нумеруются псевдослучайным образом.
Зачем?

Зачем?
Псевдослучайность для данного применения хуже обычной последовательной нумерации переданных пакетов! Для непрягающего подтверждения хорошо годится введение номера последнего принятого пакета в заголовок с целью частичной замены отдельного пакета для подтверждения. Заодно вкупе с номером переданного получается приличный иденификатор конкретного пакета.
Для заметного увеличения пропускной способности канала при наличии подтверждений классически применяются 'sliding windows' (смотрите TCP). Применение протоколов только с Neganive Acknowledgment
черевато тем, что осутвующий намертво адресат не идентифицируется.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 15:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01439 секунд с 7
ELECTRONIX ©2004-2016