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

 
 
 
Reply to this topicStart new topic
> Сравнение данных
TamTam
сообщение Mar 25 2007, 10:30
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



Так как в МК который искользую уже сейчас крайне нехватает памяти подскажите как грамотнее всего сравнить данные которые приходят из варта

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

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

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

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

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

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

Зарание всем примного благодарен.
Go to the top of the page
 
+Quote Post
slog
сообщение Mar 25 2007, 13:28
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Обычно первый идет адрес. А чтобы сделать с наименьшими затратами, нужно немножко подумать ТЕБЕ. Потому что остальным ничего не известно о твоём устройстве, проце, программе и т.п. И в чем тебе нужны наименьшие затраты - ОЗУ, память программ, время или еще чего.
Чтобы получить правильный ответ - надо задать правильно вопрос.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
Demeny
сообщение Mar 26 2007, 08:40
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(TamTam @ Mar 25 2007, 11:30) *
Так как в МК который искользую уже сейчас крайне нехватает памяти подскажите как грамотнее всего сравнить данные которые приходят из варта

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

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

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

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

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

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

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

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

Экономить память здесь не на чём. Все расходы по ней - сдвиговый буфер приёма 8 байт - всё остальное можно сделать на регистрах.


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
slog
сообщение Mar 26 2007, 11:11
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Сначала адрес. Если не наш, то ждем следующее стартовое условие.
Если наш - принимаем пакет и сморим CRC. Если совпала - дальше обрабатываем.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th July 2025 - 02:02
Рейтинг@Mail.ru


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