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

 
 
> Внутри Case не присваивается значение глобальной переменной, При вызове функции внутри Case
Димон Безпарольн...
сообщение Jul 31 2017, 13:07
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Весьма запутано, постараюсь объяснить.

Код
            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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
iosifk
сообщение Jul 31 2017, 19:17
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Димон Безпарольный @ Jul 31 2017, 16:07) *
int T = GPRSConnect1(TCP, MQTT_BROKER_SERVER, PORT, DEFAULT_TIMEOUT*8, DEFAULT_INTERCHAR_TIMEOUT*5);
if(!T) //


Ведь Т - это число...
А if(!T) подразумевает, что в скобках будет булево выражение - истина или ложь...
А что такое !T по Вашему??? Даже если компилятор воспримет это как битовую инверсию, то это все равно будет число, но не истина или ложь...
Для примера вместо if(!T) сделайте printf( вот этого !T в виде набора битов...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Димон Безпарольный   Внутри Case не присваивается значение глобальной переменной   Jul 31 2017, 13:07
- - alexey123_45   А если в этом case поставить точку останова и пойт...   Jul 31 2017, 13:36
|- - Димон Безпарольный   Цитата(alexey123_45 @ Jul 31 2017, 17:36)...   Jul 31 2017, 15:11
- - kolobok0   Цитата(Димон Безпарольный @ Jul 31 2017, 16...   Jul 31 2017, 17:18
- - scifi   Напрашивается поставить на эту переменную watchpoi...   Jul 31 2017, 17:52
|- - Димон Безпарольный   Цитата(iosifk @ Jul 31 2017, 23:17) Ведь ...   Jul 31 2017, 19:35
|- - aaarrr   Цитата(iosifk @ Jul 31 2017, 22:17) А что...   Jul 31 2017, 20:53
|- - andrew_b   Цитата(iosifk @ Jul 31 2017, 22:17) Ведь ...   Aug 1 2017, 05:28
|- - Kabdim   Цитата(iosifk @ Jul 31 2017, 22:17) Ведь ...   Aug 1 2017, 09:37
|- - Димон Безпарольный   Цитата(Kabdim @ Aug 1 2017, 13:37) Либо U...   Aug 1 2017, 11:39
|- - Kabdim   Цитата(Димон Безпарольный @ Aug 1 2017, 14...   Aug 1 2017, 13:37
|- - Димон Безпарольный   Цитата(Kabdim @ Aug 1 2017, 17:37) Кстати...   Aug 1 2017, 14:36
|- - tvsdig   Теоретически может еще влиять включенная оптимизац...   Aug 1 2017, 19:54
|- - aaarrr   Цитата(tvsdig @ Aug 1 2017, 22:54) Теорет...   Aug 1 2017, 20:35
||- - AVI-crak   Кодcase(OpenTCP): //Открытие TCP ...   Aug 1 2017, 20:48
|- - Kabdim   Цитата(tvsdig @ Aug 1 2017, 22:54) Теорет...   Aug 2 2017, 09:29
|- - tvsdig   Цитата(Kabdim @ Aug 2 2017, 12:29) Не ста...   Aug 2 2017, 14:54
|- - Kabdim   Цитата(tvsdig @ Aug 2 2017, 17:54) Стараю...   Aug 2 2017, 15:10
- - Obam   А где здесь ARM? Треду именно что место в темах пр...   Aug 1 2017, 08:16
- - Aaron   берите map-файл проекта с расположением переменных...   Aug 1 2017, 12:29
- - KnightIgor   Цитата(Димон Безпарольный @ Jul 31 2017, 14...   Aug 2 2017, 15:19
- - x893   Это обсуждение курсовой 2 курса ? Какая то чушь. ...   Aug 2 2017, 15:30
- - Димон Безпарольный   Не оптимизация и ничего таккого. В функции GPRSCon...   Aug 6 2017, 15:04
- - Kabdim   Говнокод из интернета, экономия на спичках байтах,...   Aug 6 2017, 20:47


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

 


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


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