Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
04.03.2010, 00:12
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Сравнение массивов .Как лучше сделать?
В мк по RS-485 приходят пакеты данных с разных устройств. Пакет данных представляет собой массив из 80 байт . МК получивший массив обрабатывает эти данные и отсылает обратно ответ 20 байт устройству, которое прислало пакет данных.
В массиве имеется 79 байт данных и 1 байта, которые определяют, какой вид расчета нужно провести МК с полученными данными. Видов расчетов может быть 50.
Проблема в том, что разные устройства могут присылать одни и те же массивы данных с одинаковыми видами расчета, а расчёт занимает довольно много времени. Поэтому я хочу, чтобы МК выполняющий расчеты не повторял расчет, который уже был, а отправлял готовый ответ.
Думаю сделать так - Для каждого типа расчета создать свой массив в этот массив буду записывать результаты расчета и первых 3 байта данных, над которыми производился расчет. Итого у меня будет 50 массивов по 23 байта. Теперь, когда МК получает данные для расчета он сравнивает первые 3 байта с теми байтами, которые хранятся в массиве для данного типа расчета и если они совпадают, то отправляет устройству ответ, а если нет, то полученные данный начинают обрабатываться .
Правильно я хочу сделать или можно как то проще? Может есть какие то другие варианты сравнения, типа контрольной суммы или ещё как то . Меня сомнения терзаю по поводу количества байт для сравнения, а вдруг 3 байта это мало и может произойти совпадение. А больше делать не хочется, будет теряться драгоценное время, мк и так будет работать в захлеб .
Короче нужно сделать максимально быстрое сравнение. Может, кто что посоветует ?
|
|
|
|
04.03.2010, 00:31
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: Сравнение массивов .Как лучше сделать?
В пакете поле CRC. Сравнивать его.
|
|
|
|
04.03.2010, 02:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Сравнение массивов .Как лучше сделать?
Сообщение от Zemlyanov
|
Короче нужно сделать максимально быстрое сравнение. Может, кто что посоветует ?
|
Чего сравнивать то? Необработанный пакет с результатами обработки???
Или с результатами и необработанный пакет хранить? Так памяти не хватит. Вспоминая недавнюю тему - ведь мозгом является АВР? Тогда 50 видов просто не сохранить, памяти не хватит. Проще всего считать в лоб, с оптимизацией расчета по скорости. Что хоть за расчет? Если он будет выполняться быстрее, ем наберется следующий пакет, то проблем не будет. На 115200 80 байт это примерно 70мс. При частоте 8МГц ~ 560 тысяч тактов. Это довольно много.
|
|
|
|
04.03.2010, 11:38
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Re: Сравнение массивов .Как лучше сделать?
Сообщение от kison
|
Чего сравнивать то? Необработанный пакет с результатами обработки???
Или с результатами и необработанный пакет хранить?
|
Сравнивать выборку из 3 байт пришедшего с 3 байтами выборки уже обработанного пакета. Пакеты не сохраняются, сохраняется только результат расчетов и три 3 байта выборки из пакета который был обработан, для идентификации, я написал выше . Расчет - это декодирование данных по определенному алгоритму, на данный момент МК обрабатывает пакеты без сравнения и входящий буфер загружен на 100%, 40 % входящих пакетов повторяются, поэтому и стала задача отфильтровывать повторяющиеся пакеты , чтобы не повторять один и тот же расчет а сразу отправлять готовый ответ.
|
|
|
|
04.03.2010, 11:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Сравнение массивов .Как лучше сделать?
Сообщение от Zemlyanov
|
Сравнивать выборку из 3 байт пришедшего с 3 байтами выборки уже обработанного пакета
|
Если Вы уверены, что совпадений не будет, то можно, иначе - только контрольной суммой, которая вычисляется сразу по приходе очередного байта пакета, чтобы не тратить время на цикл подсчета. К тому тому же один-два байта КС займут меньше памяти
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:53.
|
|