Идея в том, чтобы не вешать процесс намертво ожиданиями.
Отправка начинается по команде CRWP. Отправляется первая часть:
Цитата
ebdat9_01SendToModem((u8*)"AT+CMGS=\"+XXXXXXXX\"\r",23);
Взводится флаг ожидания приглашения ">" и инициализируется счетчик SMSFlagsClear:
Цитата
if (p1==2) {//Команда CRWP = 2
SMSFlagsClear=3; WaitSMS = 1; //Сброс флагов WaitSMS и SMSReady через 9с при неответе
ebdat9_01SendToModem((u8*)"AT+CMGS=\"+79653749528\"\r",23);} //Отправляем адресат
SMSFlagsClear обрабатывается (на вычитание) в событии EVENT_TIMER (период - 3с) и при обнулении обнуляет также флаги
WaitSMS и SMSReady:
Цитата
if (SMSFlagsClear) //Обнуление флагов SMSReady и WaitSMS
SMSFlagsClear--; //по таймеру SMSFlagsClear
if (!SMSFlagsClear) {SMSReady = 0; WaitSMS = 0;}}
Флаг SMSReady устанавливается в событии EVENT_MODEMDATA при ответе приглашением ">":
Цитата
if (WaitSMS) //Если идет отправка СМС
pKey = (s8*)strstr(string,">");//pKey<>0 если есть ">"
if (pKey) {SMSReady = 1;}} //Флаг ответа модема
Т.е. - отправили первую часть, ждем приглашения, отправляем вторую часть.
В итоге получается громоздко. Может кто знает - как проще?