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

 
 
> Есть ли классика обработки ответов от GSM модуля на стороне МК ?, Асинхронный режим, без контроля потока
vassabi
сообщение Mar 17 2013, 10:04
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 18-02-13
Из: Киев
Пользователь №: 75 678



Задался вопросом, а существует ли классический алгоритм обработки ответов модуля на стороне микроконтроллера?
Лично я пробую обрабатывать на лету:
Временный буфер (50 байт, например), он до начала приема заполнен значениями 0А, это для обработки двух-символьных ответов 30 0D и 34 0D.
Указатель - переменная на последний принятый байт в буфере, по умолчанию = 1.
В основном цикле отправляю команду в модуль и в цикле жду изменения переменной результата.
По прерыванию на UART:
- пополняю временный буфер принятым байтом (пополнение начинается не с нулевого байта, а с первого, опять же, для обработки двух-символьных ответов);
- если указатель >= 2, проверяю три последних символа буфера на соответствие маске (0A 30 0D, 0A 34 0D etc.);
- если соответствие есть - записываю в переменную результата (соответственно 30, 31, 34 etc.);
- инкрементирую указатель на последний принятый байт и опять жду прерывания.

Думал просто искать ответ во временном буфере, выдержав какую-то паузу после отправки команды в модуль, но время выполнения команд может быть очень разное...
В общем, это мой дебютный алгоритм опроса модулей, по этому и задался вопросом, а как пишут бывалые?




Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vassabi
сообщение Mar 17 2013, 13:06
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 18-02-13
Из: Киев
Пользователь №: 75 678



Цитата
Отсекая строки по 0D 0A...
Так не все же ответы заканчиваются 0D 0A, некоторые только 0D.

У каждой структуры свой обработчик? Т.е. например ожидание соединения обрабатывается индивидуально?

Цитата
в Очередь сообщений FreeRTOS
А бинарный поток, я так понимаю, отдельно обрабатывается?

Цитата
откусывается кусок RAM в несколько кБ
Ну да, если приложение не ресурсоемкое, то использование камня среднего или старшего семейства будет иметь сомнительное оправдание sm.gif

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

Сообщение отредактировал vassabi - Mar 17 2013, 13:07
Go to the top of the page
 
+Quote Post
kan35
сообщение Mar 17 2013, 18:00
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(vassabi @ Mar 17 2013, 17:06) *
Так не все же ответы заканчиваются 0D 0A, некоторые только 0D.

0D 0A всегда, если отправляешь например AT\r то эхо все равно будет AT\r\n
тут еще AlexandrY правильно подметил, что по ">" тоже нудно отсекать - все верно, для SMS по нему отсекаю так же. В другое время этот символ никогда не появляется.
Цитата(vassabi @ Mar 17 2013, 17:06) *
У каждой структуры свой обработчик? Т.е. например ожидание соединения обрабатывается индивидуально?

Я описал как бы сам механизм отлова строк, а сама функция подачи АT команд выглядит примерно так: как у printf неограниченно количество аргументов в виде строк с возможными ответами и выход из функции либо по таймауту либо по успешному нахождению одной из строк в аргументах
Цитата(vassabi @ Mar 17 2013, 17:06) *
А бинарный поток, я так понимаю, отдельно обрабатывается?

Да, отдельно, после команды ATD*99# используется просто буфер в виде той же очереди FreeRTOS, а уж TCP стек забирает оттуда данные - тут совсем все просто.
Цитата(vassabi @ Mar 17 2013, 17:06) *
Ну да, если приложение не ресурсоемкое, то использование камня среднего или старшего семейства будет иметь сомнительное оправдание sm.gif

Соглашусь.
Цитата(vassabi @ Mar 17 2013, 17:06) *
Еще минус вижу в сложности написания стандартной библиотеки.
В общем, идея понятна, спасибо за ваш ответ. А то я сомневался, что на лету это рационально, т.к. теоретичсески можно нарваться на переполнение стека или опоздать на прием следующего байта...

Код достаточно переносимый.
Я еще не стал уподробняться, что у меня не просто прерывание по RX, а используется DMA, так как STM32 и поверх еще прослойка в виде CMUX, но сути это не меняет. Кстати CMUX очень рекомендую: я допиливаю трекер, так что очень приятно иметь виртуальные порты: один для GPRS, другой для SMS и звонков, третий для качества сигнала и определения видимых сот.
Еще в эту систему для полного счастья следует добавить поддержку спящего режима модема (с линией DTR как правило). Кстати, модемы SierraWireless мне в этом плате понравились - дополнительных сигналов не требуется. В общем вроде простая задача, а можно зайти очень далеко :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vassabi   Есть ли классика обработки ответов от GSM модуля на стороне МК ?   Mar 17 2013, 10:04
- - kan35   Я сделал структуру для ответа с собственно массиво...   Mar 17 2013, 12:31
- - andrewlekar   Классики нет, особенно если требуется принимать да...   Mar 17 2013, 13:26
- - AlexandrY   Цитата(vassabi @ Mar 17 2013, 12:04) В об...   Mar 17 2013, 13:47
|- - x893   Цитата(AlexandrY @ Mar 17 2013, 17:47) Пр...   Mar 17 2013, 14:27
|- - AlexandrY   Цитата(x893 @ Mar 17 2013, 16:27) Не выго...   Mar 17 2013, 18:25
|- - kan35   Цитата(AlexandrY @ Mar 17 2013, 22:25) DM...   Mar 17 2013, 19:03
- - vassabi   Цитата("AlexandrY")...записываются симво...   Mar 17 2013, 20:30
- - jack_avenger   Цитата(kan35 @ Mar 17 2013, 15:31) Я сдел...   Mar 17 2013, 23:00
- - vassabi   Цитата("vassabi")Очень круто, но я так п...   Mar 18 2013, 00:34
- - GeGeL   И после всего этого еще ругают OCPU, EAT etc. На...   Mar 18 2013, 19:49
|- - Aurochs   Цитата(GeGeL @ Mar 18 2013, 21:49) И посл...   Mar 18 2013, 22:19
|- - stepper88   Недавно соорудил управление Quectel M10 аналогии с...   Mar 22 2013, 09:13
|- - _Артём_   Цитата(stepper88 @ Mar 22 2013, 11:13) Но...   Mar 22 2013, 11:17
- - jack_avenger   Цитата(GeGeL @ Mar 18 2013, 22:49) И посл...   Mar 18 2013, 20:12
- - zebrox   Думаю "отлов" это единственно правильный...   Mar 22 2013, 12:09
|- - megajohn   делаю всё как AlexandrY но с некоторыми отличиями:...   Mar 22 2013, 14:13
|- - _Артём_   Цитата(zebrox @ Mar 22 2013, 14:09) Думаю...   Mar 22 2013, 14:35
- - jack_avenger   Думаю что речь не идет о 100% парсинге, а только о...   Mar 22 2013, 14:44
|- - stepper88   to megajohn А как у вас построенна эта обработка а...   Mar 22 2013, 15:07
|- - vassabi   Цитата(stepper88 @ Mar 22 2013, 17:07) .....   Mar 22 2013, 15:15
|- - stepper88   Цитата(vassabi @ Mar 22 2013, 21:15) А за...   Mar 22 2013, 17:03
- - jack_avenger   Цитата(stepper88 @ Mar 22 2013, 18:07) to...   Mar 22 2013, 15:28
- - zebrox   Ловить надо только то, что нас интересует. В том ...   Mar 22 2013, 16:32
- - jack_avenger   Цитата(zebrox @ Mar 22 2013, 15:09) Думаю...   Mar 22 2013, 17:00
|- - zebrox   Цитата(jack_avenger @ Mar 22 2013, 20:00)...   Mar 22 2013, 17:31
- - jack_avenger   Цитата(zebrox @ Mar 22 2013, 20:31) Оконч...   Mar 22 2013, 17:41
|- - zebrox   Цитата(jack_avenger @ Mar 22 2013, 20:41)...   Mar 22 2013, 18:09
|- - vassabi   Цитата(zebrox)... выставляет сигнал РТЦ. После вых...   Mar 22 2013, 18:13
- - zebrox   да, ртс   Mar 22 2013, 22:23
- - jack_avenger   Цитата(zebrox @ Mar 22 2013, 22:09) Для э...   Mar 23 2013, 13:18
|- - vassabi   Цитата(jack_avenger @ Mar 23 2013, 15:18)...   Mar 23 2013, 17:13
- - zebrox   Честно говоря, не совсем понимаю зачем отличать юр...   Mar 23 2013, 17:52
- - jack_avenger   Цитата(vassabi @ Mar 23 2013, 21:13) По э...   Mar 23 2013, 18:32
|- - vassabi   Цитата(jack_avenger @ Mar 23 2013, 20:32)...   Mar 23 2013, 18:44
- - zebrox   Да нет, обработчик один, на все отведы, эха, юрц. ...   Mar 23 2013, 19:55
- - jack_avenger   Цитата(vassabi @ Mar 23 2013, 22:44) Это ...   Mar 23 2013, 19:55
|- - vassabi   Цитата(jack_avenger @ Mar 23 2013, 21:55)...   Mar 23 2013, 23:44
- - jack_avenger   Цитата(vassabi @ Mar 24 2013, 03:44) GSM ...   Mar 23 2013, 23:51


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

 


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


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