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

 
 
> Поиск команды в массиве данных
interrupt
сообщение Dec 3 2015, 19:32
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-02-08
Пользователь №: 35 466



Такая задача. Контроллер принимает по UART некоторые данные в виде строк разной длины и содержания. Т.е. обычные текстовые строки. В этих строках может содержаться команда для контроллера, например: Switсh on out 7, input 1 disable, Led 11 on.
Строки хранятся до разбора в массиве. Размер массива ограничен, а частота поступления новых строк не нормируется. Поэтому нужно быстро разобрать строку, вычленить из нее ключевые слова и передать соответствующие команды основной программе. Задача усложняется тем, что таких слов будет около 100, кроме того, в будущем их кол-во предполагается увеличить.
Как реализуется обычно такая задача? Ничего умнее, как последовательный поиск каждого слова в строке придумать не могу. Но это очень долго получается. Например, сначала придется пролистать весь массив в поисках "Led", потом опять весь массив в поисках "input" и т.д. А хочется читать строку 1 раз, по пути находя все ключевые слова.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
interrupt
сообщение Dec 4 2015, 09:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-02-08
Пользователь №: 35 466



Ввод может быть как человеком, так и внешним устр-вом. Как пример я привел GSM-модуль: можно ручками через терминал писать ему команды, а можно выстреливать их из контроллера. При этом последовательность команд будет разной, кол-во в общем-то тоже (0xOD выступает в качестве разделителя и флага одновременно).
C CRC32 интересно, тоже думал в этом направлении. Наверно, это наиболее быстрый вариант (считать CRC32 для первого слова, искать в массиве команд. Потом CRC второго слова - искать в массиве, и так, пока не наткнулся на подходящее. Разобрал команду - пошел дальше).
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Dec 4 2015, 09:37
Сообщение #3


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Может упростить задачу?
Писать примерно так : "~ включить_канал:1;"
где "~" - стартовый байт
"включить_канал" - команда
":" признак что потом идёт число
";" признак конца пачки
команду собирать побайтно в массив и сравнивать через strcmp .
IO("~ включить_канал:1;",19);
Прикрепленные файлы
Прикрепленный файл  io.txt ( 7.5 килобайт ) Кол-во скачиваний: 21
 


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- interrupt   Поиск команды в массиве данных   Dec 3 2015, 19:32
- - Александр77   Если есть возможность повлиять на формирование сам...   Dec 3 2015, 19:50
- - interrupt   Да в общем-то все данные получаются значимыми. Про...   Dec 3 2015, 20:10
|- - CrimsonPig   Цитата(interrupt @ Dec 3 2015, 20:10) Да ...   Dec 3 2015, 20:55
- - interrupt   Цитата(CrimsonPig @ Dec 3 2015, 23:55) Ну...   Dec 3 2015, 21:11
- - gerber   Можно составить статический связный список соответ...   Dec 3 2015, 22:19
- - jcxz   Цитата(interrupt @ Dec 4 2015, 01:32) Так...   Dec 4 2015, 03:34
- - Dog Pawlowa   Я бы задумался над постановкой задачи, ибо в ней п...   Dec 4 2015, 07:00
|- - jcxz   Цитата(Dog Pawlowa @ Dec 4 2015, 13:00) Я...   Dec 4 2015, 07:53
- - psL   вот проект. решает аналогичную задачу. может приго...   Dec 4 2015, 09:18
- - interrupt   Цитата(psL @ Dec 4 2015, 12:18) вот проек...   Dec 4 2015, 09:54
- - XVR   Вам подойдет поиск по Регулярным Выражениям. Из вс...   Dec 4 2015, 10:24
|- - CrimsonPig   Цитата(XVR @ Dec 4 2015, 10:24) Вам подой...   Dec 4 2015, 10:27
|- - XVR   Цитата(CrimsonPig @ Dec 4 2015, 13:27) а ...   Dec 4 2015, 10:45
|- - CrimsonPig   Цитата(XVR @ Dec 4 2015, 10:45) Видимо ну...   Dec 4 2015, 10:52
- - interrupt   Цитата(Lmx2315 @ Dec 4 2015, 12:37) Может...   Dec 4 2015, 10:25
- - MrYuran   AT команды   Dec 4 2015, 10:26
|- - Tarbal   Цитата(MrYuran @ Dec 4 2015, 13:26) AT ко...   Dec 4 2015, 12:30
- - interrupt   За советы спасибо. По поводу скорости. Обмен идет...   Dec 4 2015, 11:56
|- - XVR   Цитата(interrupt @ Dec 4 2015, 14:56) Как...   Dec 4 2015, 12:39
|- - interrupt   Цитата(XVR @ Dec 4 2015, 15:39) Trie дере...   Dec 4 2015, 13:17
|- - Harvester   Цитата(interrupt @ Dec 4 2015, 16:17) Пох...   Dec 19 2015, 11:26
- - ДЕЙЛ   Цитата(interrupt @ Dec 3 2015, 23:32) Так...   Dec 18 2015, 22:18
- - SlavaV   привет, особо не вдавался в советы форумчан (проч...   Dec 19 2015, 13:22


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

 


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


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