Цитата(zheka @ Jul 31 2018, 15:16)

Владивольт, окститесь, жизнь есть и за пределами МКАД. И интернет с электричеством тоже).
Все равно было бы неплохо уточнить, поддерживает ли данный оператор в вашем регионе 2G. Сейчас идет тенденция на сворачивания 2G, чтобы освободить частоты под 4G. Мы уже на такое нарвались и сейчас обновляем приборы в некоторых странах.
Цитата(zheka @ Jul 31 2018, 15:16)

Grigoij, а проясните еще один практический момент...
Однозначной рекомендации здесь наверное нет. Расскажу как примерно у меня все то дело работает.
Для обмена сообщенями я используют 2 буфера (один Rx, другой Tx) доступ к которым идет через DMA. Т.е. в явном виде взаимодействия с UART нет. Далее в программе есть отдельная задача (софт построен на базе FreeRTOS), которая отвечает за работу с GSM модемом. Сама эта задача представлена в виде машины состояний. В простом варианте у меня всего 5 состояний:
Код
idle (вообще ничего не делаем)
инициализация модема (включаем модем и отправляем набор команд для настройки модема)
регистрация в сети (регистриуемся в сети)
TCP соединение (обрабатываем входящие/исходящие пакеты)
выключение (корректно выключаем модем AT командам и выключаем питание)
Каждое состояние (кроме TCP соединения) работает по примерно следующему сценарию:
Код
если первый раз зашли в это состояние, то
отправить первую AT команду
инициализировать таймер для отслеживания timeout на ответ модема
отдать управление FreeRTOS
если повторно зашли в это состояние (ну т.е. FreeRTOS нам управление вернула), то
проверить, нет ли чего в буфере, а если есть, то обработать (например, перейти в следующее состояние
или отрпавить какое-нибудь сообщение основной задаче)
проверить не сработал ли timeout (например, модем не отвечает)
TCP соединение работает несколько иначе. Я сейчас отказался от стека внутри модема и использую LWIP. Это состояние работает по примерно следующему сценарию:
Код
проверить, есть ли какая команда от главной задачи (например на выключение модема)
если команда есть - выполнить ее
если команды нет, то считать все, что есть в буфере и отправить это в LWIP на обработку
Вроде не сильно запутанно написал.
Еще надо учесть пару моментов. Во-первых, для модема у меня выключены URC. Это позволяет исключить "внезапный" набор каких-либо сообщений от модема. Т.е. получается система "запрос-ответ". Это позволяет легко определить, ждем мы что-нибудь от модема или нет. Во-вторых, мне нет необходимости обрабатывать СМСки или входящие звонки. С другой стороны наличие входящей СМС можно проверить по запросу, а такой поведение легко добавляет в машину состояний, описанную выше. А для входящего звонка обычно есть еще и отдельны вывод у модема, который о нем сигнализирует.