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

 
 
 
Reply to this topicStart new topic
> прием данных по RS-232, описание алгоритма обработки входящих данных
chief_olimp
сообщение Aug 11 2006, 15:37
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



Предлагаю в этой ветке обсудить следующий вопрос - стоит задача, принять по UART с десяток байт и определить что мы приняли. У кого какие на этот счет будут предложения? У меня кроме как побитно сравнивать ничего в голову не лезет. Если данных будет много то алгоритм получится медленным и "тупым".
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 11 2006, 15:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Если вы про AutoBaudDetect, то см. например у Texas Instruments апликуху. Или уточните, что именно вы имеете в виду под словами "распознать"?
Go to the top of the page
 
+Quote Post
Woodoo
сообщение Aug 11 2006, 16:10
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 26-05-05
Из: Севастополь
Пользователь №: 5 391



Цитата:
... и определить что мы приняли...

Однозначно: 10 байт приняли. smile.gif

А если серьезно, что Вы имеете ввиду под словами "определить что приняли"? Поподробнее плз.
Go to the top of the page
 
+Quote Post
bgc
сообщение Aug 11 2006, 16:12
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 30-07-06
Из: Москва
Пользователь №: 19 188



UART работает побайтно, при чем тут побитно сравнивать.
я не понимаю задачу...


--------------------
Окружающий мир - не иссякающий источник сюрпризов!
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 11 2006, 16:59
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(bgc @ Aug 11 2006, 22:12) *
я не понимаю задачу...

Дык никто похоже не понимает smile.gif А постановщик вопроса молчит как партизан. Видимо только в понедельник дождемся подробностей.
Go to the top of the page
 
+Quote Post
Woodoo
сообщение Aug 11 2006, 18:38
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 26-05-05
Из: Севастополь
Пользователь №: 5 391



может и дождемся... извеняюсь за оффтоп, просто вспомнил фильм один, до ужаса глупый, но местами смешной - "Миллион лет до нашей эры".
Вождь грязноволосых говорит:
- у меня есть план! ... что вы об этом думаете?
- но вождь, Вы же ничего не сказали?
- как не сказал? ... (молчание) Что вы об этом думаете?

P.S.: уже даже интересно стало, что же автор имел ввиду
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Aug 11 2006, 18:46
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



biggrin.gif
да все очень просто. Это проэкт для мобильного телефона. Принимать будем его ответ на команды (отсюда про десять байт сказано, но это не столь важно). Например он будет возвращать номер звонившего (про формат мы не говорим) а мы будем смотреть по базе, ессть ли у нас такой. база либо в памяти программ либо озу либо в энергонезависимой памяти (так универсальней). + может еще чего то будет. пока я сделал инициализацию телефона (марку модель на жк выводит для понтов), так что проект пока разрабатывается. Пишу на асме, но тут как раз нужен алгоритм...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 11 2006, 19:36
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Если это мобильный телефон, то, за редкими исключениями, ответ будет начинаться с определенного префикса: +CLIP - для отображения номера входящего звонка, +CMTI - при входящем сообщении и т.п. Вот этот префикс и нужно определить сначала, и именно простым сравнением. Дальнейший разбор строки делается в зависимости от обстоятельств.
Go to the top of the page
 
+Quote Post
Woodoo
сообщение Aug 11 2006, 19:36
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 26-05-05
Из: Севастополь
Пользователь №: 5 391



или я чтото не понял или так:
под словом "определить что мы приняли" пониметься алгоритм поиска совпадающего номера/илиЧегоЕще в базе данных. Если так, то подтвердите это, так как без надобности неахото описывать алгаритм поиска в базе данных.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Aug 11 2006, 20:29
Сообщение #10


Знающий
****

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



Если на асме пишете,то по определению будете сравнивать каждый символ.
Алгоритм сравнения с базой(таблицей) данных достаточно простой.

1 Сравниваете 1 полученный символ с 1 в таблице
2 Если совпало ,сравниваете 2 со 2
3 Если не совпало ,переходим на следующую позицию в таблице.
4 Опять сравниваем 1 с 1 и т.д. пока все не совпадет

можно другой способ,считать CRC полученный байтов и сравнивать с уже подготовленными CRC
каждой позиции в таблице.
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Aug 12 2006, 08:48
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



Цитата(bodja74 @ Aug 11 2006, 23:29) *
Если на асме пишете,то по определению будете сравнивать каждый символ.
Алгоритм сравнения с базой(таблицей) данных достаточно простой.

1 Сравниваете 1 полученный символ с 1 в таблице
2 Если совпало ,сравниваете 2 со 2
3 Если не совпало ,переходим на следующую позицию в таблице.
4 Опять сравниваем 1 с 1 и т.д. пока все не совпадет

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

второй вариант подходит больше первого так как теоретически будет занимать меньше времени.
Можно примерчик по подсчету CRC (алгоритм)?

Для Woodoo: поняли вы все абсолютно правильно, можно написать тупо, а я хочу более универсальный алгоритм который можно будет использовать неодинажды.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Aug 12 2006, 11:21
Сообщение #12


Знающий
****

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



Цитата
второй вариант подходит больше первого так как теоретически будет занимать меньше времени.
Можно примерчик по подсчету CRC (алгоритм)?


Ведем подсчет контрольной суммы, тоесть складываем числовые значения всех символов(чисел)-получаем результат,на асме немного морока с 2байтной величиной,можно и 1байтной обойтись и потом
проверить посимвольно совпавшую позицию для убедительности.
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Aug 12 2006, 11:34
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



Цитата(bodja74 @ Aug 12 2006, 14:21) *
Цитата

второй вариант подходит больше первого так как теоретически будет занимать меньше времени.
Можно примерчик по подсчету CRC (алгоритм)?


Ведем подсчет контрольной суммы, тоесть складываем числовые значения всех символов(чисел)-получаем результат,на асме немного морока с 2байтной величиной,можно и 1байтной обойтись и потом
проверить посимвольно совпавшую позицию для убедительности.

думаю байта будет достаточно. проверяем сначала его потом побайтно, а потом если не совпало ищем может где есть совпадения. так наверное и буду делать. cheers.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 12 2006, 14:43
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



С CRC имело бы смысл связываться, если бы требовалось распознать сотни слов, а здесь их и десятка не наберется. Выйгрыш по скорости в данном случае тоже, мягко говоря, сомнителен.
Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 12 2006, 16:00
Сообщение #15



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(aaarrr @ Aug 12 2006, 18:43) *
С CRC имело бы смысл связываться, если бы требовалось распознать сотни слов, а здесь их и десятка не наберется. Выйгрыш по скорости в данном случае тоже, мягко говоря, сомнителен.

Целиком и полностьюsmile.gif

2 chief_olimp Если это перевести на ассемблер, будет Вам счастьеsmile.gif
Код
int strcmp(register const char * s1, register const char * s2)
{
    register signed char    r;

    while(!(r = (unsigned char)*s1 - (unsigned char)*s2++) && *s1++)
        continue;
    return r;
}
Go to the top of the page
 
+Quote Post

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

 


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


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