Nikolaev_Aleksey (13.10.2015 09:00, просмотров: 2484)
Алгоритм работы микроконтроллера с GSM модулем. Появился вопрос - а кто как организовывает работу с ними?
Раньше проекты были простыми - типа включить модуль отослать смс, выключить. Либо отправить данные по TCP, получить ответ и выключить. Вся конструкция решалась через switch, вот так (запрос - ответ, если пришел другой ответ, все равно ожидаем нужного определенное время. Не пришел ответ - повтор команды. Счетчик ошибок по этой команде перевалил порог, на контрольную точку)
[code]
case 10:
sim900_put_string("AT+CFUN=1\r\n"); sim900_next_state();
break
case 11:
// после выдачи предыдущей команды ищем в буфере принятых строк (буфер на 5 строк)
if (sim900_compare_strings("OK\n")) sim900_next_state(); else
sim900_wait_answer(2,0); // ждем ответ 2 секунды и на повтор команды
break;
case 11:
// далее
[/code]
Сейчас делаю девайс, который 24 часа включен: входящие звонки и смс, исходящие звонки и смс, Подключение по TCP и UDP, запрос баланса. Т.е. система последовательный запрос - ответ не подходит, т.к. в любой момент может прийти входящий звонок, смс, отвалиться интернет, либо прийти пакет от внешнего сервера, а я в этот момент допустим смс перебираю.
Если применить вышеприведеный подход, автомат switch разрастается настолько, что теряется смысл написанного, настолько получается непонятно.
Кто может поделиться опытом - как решается такая ситуация? Разделять по потокам (Голосовые вызовы, GPRS, СМС и USSD в разные потоки - память жалко.)?
ps: не стал выносить тему в "Мобильная и беспроводная связь" - думаю это больше к алгоритмам относится.