Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сравнение данных
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
TamTam
Так как в МК который искользую уже сейчас крайне нехватает памяти подскажите как грамотнее всего сравнить данные которые приходят из варта

данные типа АТ команд

формат такой XXX XXX XX

первые 3 команда

вторые 3 код и адрес устройства

полседние 2 состояние и ЦРЦ

Как по приходу данных впорт с наименьшими затратами обаботать пакет ?

Зарание всем примного благодарен.
slog
Обычно первый идет адрес. А чтобы сделать с наименьшими затратами, нужно немножко подумать ТЕБЕ. Потому что остальным ничего не известно о твоём устройстве, проце, программе и т.п. И в чем тебе нужны наименьшие затраты - ОЗУ, память программ, время или еще чего.
Чтобы получить правильный ответ - надо задать правильно вопрос.
Demeny
Цитата(TamTam @ Mar 25 2007, 11:30) *
Так как в МК который искользую уже сейчас крайне нехватает памяти подскажите как грамотнее всего сравнить данные которые приходят из варта

данные типа АТ команд

формат такой XXX XXX XX

первые 3 команда

вторые 3 код и адрес устройства

полседние 2 состояние и ЦРЦ

Как по приходу данных впорт с наименьшими затратами обаботать пакет ?

Задача далеко не простая, как может показаться поначалу. Умным словом она называется "парсинг". Сначала необходимо грамотно построить собственно процедуру приёма команды. В потоке байт, идущих с УАРТа, необходимо выделять начало командной строки. Если об этом не позаботиться, а просто укладывать каждые 8 байт для анализа - после первого же сбоя все дальнейшие команды будут неверными. Если это АТ-команды, то признаком начала (маркером) служит последовательность символов "АТ", после которых идёт собственно команда. Если такого маркера нет (а судя по вашему описанию его нет), тогда нужны обязательные таймауты между командами, или же необходимо будет данные с УАРТа укладывать в сдвиговый буфер и после приёма КАЖДОГО байта применять процедуру парсинга (разбора) последних 8 байт - "уж не команда ли принята в моём буфере?"

Теперь собственно парсинг (разбор) ваших команд.
1. Сначала CRC - если ОК - идём дальше - если CRC не совпадает, прекращаем разбор.
2. Анализ адреса. Если команда адресована не нам - прекращаем разбор.
3. Анализ команды. Если команда невалидна - прекращаем разбор, если распознана - выполняем команду.

Экономить память здесь не на чём. Все расходы по ней - сдвиговый буфер приёма 8 байт - всё остальное можно сделать на регистрах.
slog
Сначала адрес. Если не наш, то ждем следующее стартовое условие.
Если наш - принимаем пакет и сморим CRC. Если совпала - дальше обрабатываем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.