chief_olimp 0 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба Предлагаю в этой ветке обсудить следующий вопрос - стоит задача, принять по UART с десяток байт и определить что мы приняли. У кого какие на этот счет будут предложения? У меня кроме как побитно сравнивать ничего в голову не лезет. Если данных будет много то алгоритм получится медленным и "тупым". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба Если вы про AutoBaudDetect, то см. например у Texas Instruments апликуху. Или уточните, что именно вы имеете в виду под словами "распознать"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Woodoo 0 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба Цитата: ... и определить что мы приняли... Однозначно: 10 байт приняли. :) А если серьезно, что Вы имеете ввиду под словами "определить что приняли"? Поподробнее плз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bgc 0 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба UART работает побайтно, при чем тут побитно сравнивать. я не понимаю задачу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба я не понимаю задачу... Дык никто похоже не понимает :) А постановщик вопроса молчит как партизан. Видимо только в понедельник дождемся подробностей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Woodoo 0 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба может и дождемся... извеняюсь за оффтоп, просто вспомнил фильм один, до ужаса глупый, но местами смешной - "Миллион лет до нашей эры". Вождь грязноволосых говорит: - у меня есть план! ... что вы об этом думаете? - но вождь, Вы же ничего не сказали? - как не сказал? ... (молчание) Что вы об этом думаете? P.S.: уже даже интересно стало, что же автор имел ввиду Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chief_olimp 0 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба да все очень просто. Это проэкт для мобильного телефона. Принимать будем его ответ на команды (отсюда про десять байт сказано, но это не столь важно). Например он будет возвращать номер звонившего (про формат мы не говорим) а мы будем смотреть по базе, ессть ли у нас такой. база либо в памяти программ либо озу либо в энергонезависимой памяти (так универсальней). + может еще чего то будет. пока я сделал инициализацию телефона (марку модель на жк выводит для понтов), так что проект пока разрабатывается. Пишу на асме, но тут как раз нужен алгоритм... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба Если это мобильный телефон, то, за редкими исключениями, ответ будет начинаться с определенного префикса: +CLIP - для отображения номера входящего звонка, +CMTI - при входящем сообщении и т.п. Вот этот префикс и нужно определить сначала, и именно простым сравнением. Дальнейший разбор строки делается в зависимости от обстоятельств. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Woodoo 0 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба или я чтото не понял или так: под словом "определить что мы приняли" пониметься алгоритм поиска совпадающего номера/илиЧегоЕще в базе данных. Если так, то подтвердите это, так как без надобности неахото описывать алгаритм поиска в базе данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bodja74 0 11 августа, 2006 Опубликовано 11 августа, 2006 · Жалоба Если на асме пишете,то по определению будете сравнивать каждый символ. Алгоритм сравнения с базой(таблицей) данных достаточно простой. 1 Сравниваете 1 полученный символ с 1 в таблице 2 Если совпало ,сравниваете 2 со 2 3 Если не совпало ,переходим на следующую позицию в таблице. 4 Опять сравниваем 1 с 1 и т.д. пока все не совпадет можно другой способ,считать CRC полученный байтов и сравнивать с уже подготовленными CRC каждой позиции в таблице. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chief_olimp 0 12 августа, 2006 Опубликовано 12 августа, 2006 · Жалоба Если на асме пишете,то по определению будете сравнивать каждый символ. Алгоритм сравнения с базой(таблицей) данных достаточно простой. 1 Сравниваете 1 полученный символ с 1 в таблице 2 Если совпало ,сравниваете 2 со 2 3 Если не совпало ,переходим на следующую позицию в таблице. 4 Опять сравниваем 1 с 1 и т.д. пока все не совпадет можно другой способ,считать CRC полученный байтов и сравнивать с уже подготовленными CRC каждой позиции в таблице. второй вариант подходит больше первого так как теоретически будет занимать меньше времени. Можно примерчик по подсчету CRC (алгоритм)? Для Woodoo: поняли вы все абсолютно правильно, можно написать тупо, а я хочу более универсальный алгоритм который можно будет использовать неодинажды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bodja74 0 12 августа, 2006 Опубликовано 12 августа, 2006 · Жалоба второй вариант подходит больше первого так как теоретически будет занимать меньше времени. Можно примерчик по подсчету CRC (алгоритм)? Ведем подсчет контрольной суммы, тоесть складываем числовые значения всех символов(чисел)-получаем результат,на асме немного морока с 2байтной величиной,можно и 1байтной обойтись и потом проверить посимвольно совпавшую позицию для убедительности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chief_olimp 0 12 августа, 2006 Опубликовано 12 августа, 2006 · Жалоба второй вариант подходит больше первого так как теоретически будет занимать меньше времени. Можно примерчик по подсчету CRC (алгоритм)? Ведем подсчет контрольной суммы, тоесть складываем числовые значения всех символов(чисел)-получаем результат,на асме немного морока с 2байтной величиной,можно и 1байтной обойтись и потом проверить посимвольно совпавшую позицию для убедительности. думаю байта будет достаточно. проверяем сначала его потом побайтно, а потом если не совпало ищем может где есть совпадения. так наверное и буду делать. :cheers: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 12 августа, 2006 Опубликовано 12 августа, 2006 · Жалоба С CRC имело бы смысл связываться, если бы требовалось распознать сотни слов, а здесь их и десятка не наберется. Выйгрыш по скорости в данном случае тоже, мягко говоря, сомнителен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 12 августа, 2006 Опубликовано 12 августа, 2006 · Жалоба С CRC имело бы смысл связываться, если бы требовалось распознать сотни слов, а здесь их и десятка не наберется. Выйгрыш по скорости в данном случае тоже, мягко говоря, сомнителен. Целиком и полностью:) 2 chief_olimp Если это перевести на ассемблер, будет Вам счастье:) 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться