Весьма запутано, постараюсь объяснить.
Код
case(OpenTCP): //Открытие TCP
{ //
printf("\rOpen TCP Session\r");//
GSM_State_Mashine = ConnMQTT;//Успешно
GSM_Mashine_Errors = 0; //
int T = GPRSConnect1(TCP, MQTT_BROKER_SERVER, PORT, DEFAULT_TIMEOUT*8, DEFAULT_INTERCHAR_TIMEOUT*5);
if(!T) //
{ //Не успешно
printf("\rError TCP Open... Try Again...\r");//
int T = GPRSClose();//
GSM_Mashine_Errors++;//
break; //
} //
GSM_State_Mashine = ConnMQTT;//Успешно
GSM_Mashine_Errors = 0; //
printf("\rTCP Session Open\r");//
break; //
Если ставить GSM_State_Mashine = ConnMQTT после вызова GPRSConnect1, то в переменной GSM_State_Mashine остается старое значение и этот case выполняется вечно.
Сама функция GPRSConnect1 и вызываемые ей функции никакого отношения к переменной GSM_State_Mashine не имеет. Причем перед выходом из функции, содержащей этот switch (GSM_State_Mashine) присвоение есть, но за ней (снаружи этой функции) эта переменная имеет старое значение!
Пока вышел из положения присваивая значение GSM_State_Mashine = ConnMQTT; до вызова функции. Так работает. После вызова - нет. Что ж за глюк такой?
Переменная объявлена глобальной volatile unsigned int GSM_State_Mashine = 0;//
Сообщение отредактировал Димон Безпарольный - Jul 31 2017, 13:10