Перейти к содержанию
    

Битые записи в массиве.

. . . Есть например COBS. . . .

COBS, pdf - насколько я понял. Спасибо, поглядим, "что за зверь".

 

 

а теперь простым языком - как создать уникальный заголовок?

Ну, например. У Вас максимальный размер поля данных - 4 байта (бинарные)

"прореживаете" все поля данных 0x00.

Заголовок пакета 5 байт: 0x55 - 0x01 - 0x02 - 0x03 - 0x04

Завершаете пакет 0x00 - 0x00 - 0x00 - CRC_Hi - CRC_Lo

(примитив, всяческое охаивание приветствуется)

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

COBS, pdf - насколько я понял. Спасибо, поглядим, "что за зверь".

 

 

Ну, например. У Вас максимальный размер поля данных - 4 байта (бинарные)

"прореживаете" все поля данных 0x00.

Заголовок пакета 5 байт: 0x55 - 0x01 - 0x02 - 0x03 - 0x04

Завершаете пакет 0x00 - 0x00 - 0x00 - CRC_Hi - CRC_Lo

(примитив, всяческое охаивание приветствуется)

а что гарантирует что CRC_Hi - CRC_Lo примут отличное от заголовка значение?

 

в принципе я тут подумал - это нужно только для парсинга - а парсинг будет на стороне компа - там можно будет применить и более сложные алгоритмы.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что гарантирует что CRC_Hi - CRC_Lo примут отличное от заголовка значение?

заголовок состоит из 5 байт.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а теперь простым языком - как создать уникальный заголовок?

 

Если уж так неохота возиться с подменой символа, то делайте преамбулу, 4-6 байт с уникальными числами, вероятность совпадения будет ничтожно малой, да и если совпадет преамбула, то уж точно не сойдется КС...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

COBS, pdf - насколько я понял. Спасибо, поглядим, "что за зверь".

 

дык классический PPP тоже вполне юзабелен

ppp_a.gif

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а теперь простым языком - как создать уникальный заголовок?
Зачем вам заголовок? У вас все записи одинаковой длинны, никаких заголовков не нужно

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем вам заголовок? У вас все записи одинаковой длинны, никаких заголовков не нужно
а как узнать где начало следующей записи? я не могу гарантировать что запись начнется с нулевого индекса.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а как узнать где начало следующей записи? я не могу гарантировать что запись начнется с нулевого индекса.

А с какого ещё она может начаться? Вы заполняете блок фиксированного размера записями так же фиксированного размера. При этом запись не пересекает границу блока. Т.е. каждая запись начинается с индекса N*sizeof(record) (где N - номер записи).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

COBS, pdf - насколько я понял. Спасибо, поглядим, "что за зверь".

В википедии достаточно хорошо описано: https://en.wikipedia.org/wiki/Consistent_Ov...d_Byte_Stuffing

И размер кадра вовсе не ограничивается 254 байтами - легко расширяется до любого размера. Просто оверхед будет равен:

//вычисление величины увеличения размера данных при кодировании payload байт в COBS
#define CobsCodedOver(payload) ((sizeof(payload) - 1) / 254 + 1)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И размер кадра вовсе не ограничивается 254 байтами - легко расширяется до любого размера.

Поясните, пожалуйста, как размер кадра расширяется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поясните, пожалуйста, как размер кадра расширяется.

Вы почитайте описание протокола и подумайте логически.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а теперь простым языком - как создать уникальный заголовок?

Достаточно сделать заголовок пакета 0x55FA, постоянную длину пакета и контрольную сумму в конце пакета.

 

Тогда начало определяем по заголовку, набираем из потока байтов(или буфера) постоянную длину и проверяем контрольную сумму.

Если контроль не прошёл, то значит 0x55FA это данные, а не заголовок.

Ищем в набранном заголовок, если не находим, то отбрасываем набранное вообще, если находим - набираем еще байтов от нового заголовка.

И т.д. пока не засинхронизируемся с потоком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Достаточно сделать заголовок пакета 0x55FA, постоянную длину пакета и контрольную сумму в конце пакета.

Тогда начало определяем по заголовку, набираем из потока байтов(или буфера) постоянную длину и проверяем контрольную сумму.

Этот колхоз вообще никакого отношения не имеет к COBS.

COBS - кодонезависимый протокол, не нуждающийся в костылях типа контрольных сумм и поисках чего-то. И однопроходный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для связи между платами (или MCU<->CPU/FPGA) практически всегда использую байт-стаффинг. Простой, надежный. Переменная длина сообщений вообще радует - сделал себе что-то наподобие мессенджера - при этом не нужны поля размера пакета в структурах обмена и связанные с этим головные боли тоже ушли.

COBS слышал, не применял, не знаю :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...