tvsdig 0 1 августа, 2017 Опубликовано 1 августа, 2017 · Жалоба Теоретически может еще влиять включенная оптимизация. Но я за вариант кривые указатели. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 1 августа, 2017 Опубликовано 1 августа, 2017 · Жалоба Теоретически может еще влиять включенная оптимизация. На корректный код - не может. Но я за вариант кривые указатели. Маловероятно: кривым указателем можно что-нибудь испортить, а тут состояние машины у ТС остается прежним. А вообще, можно было бы уже 100500 раз дизассемблировать интересующий фрагмент. На корректный код - не может. Тут я несколько погорячился. Один из немногих встреченных мной "глюков компилятора" (как раз на ARM RVCT) был таки связан с оптимизацией: инлайнилась функция с игнорированием #pragma arm section, и код, предназначенный для выполнения из RAM, выполнялся в результате из флеш. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 1 августа, 2017 Опубликовано 1 августа, 2017 · Жалоба case(OpenTCP): //Открытие TCP { // printf("\rOpen TCP Session\r");// GSM_State_Mashine = ConnMQTT;//Успешно GSM_Mashine_Errors = 0; // if(GPRSConnect1(TCP, MQTT_BROKER_SERVER, PORT, DEFAULT_TIMEOUT*8, DEFAULT_INTERCHAR_TIMEOUT*5) == 0) // { // эта функция всегда возвращает аргумент в регистре R0, выделять новую переменную для этого не нужно. printf("\rError TCP Open... Try Again...\r");// // int T = GPRSClose();// не вижу повторного использования Т GPRSClose(); GSM_Mashine_Errors++;// break; // } // GSM_State_Mashine = ConnMQTT;//Успешно GSM_Mashine_Errors = 0; // printf("\rTCP Session Open\r");// break; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 2 августа, 2017 Опубликовано 2 августа, 2017 · Жалоба Теоретически может еще влиять включенная оптимизация. Но я за вариант кривые указатели. Не ставьте телегу вперед кобылы. Это не "оптимизации влияют", а в кривой программе undefined behavior, который при оптимизации раскрывается во всей красе. Людям которые это допускают на регулярной основе стоит подучить язык с которым они работают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tvsdig 0 2 августа, 2017 Опубликовано 2 августа, 2017 · Жалоба Не ставьте телегу вперед кобылы. Это не "оптимизации влияют", а в кривой программе undefined behavior, который при оптимизации раскрывается во всей красе. Людям которые это допускают на регулярной основе стоит подучить язык с которым они работают. Отчасти с Вами согласен по поводу подучить язык. Например раздел приоритеты я слабо знаю. Стараюсь использовать скобки. Но откуда мы знаем с квалификатором объявлена переменная GSM_State_Mashine или без. Поэтому предположил что ситуация возможна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 2 августа, 2017 Опубликовано 2 августа, 2017 · Жалоба Стараюсь использовать скобки. Вот кстати использование скобок, это не признак незнания. :) Например, вывод здесь: cout << "foo" + true ? "bar" : "baz"; будет явно не тем который ожидаем, даже для тех кто хорошо знает приоритеты. И даже если есть знание - скобки всё равно лучше ставить, потому что иногда глаз замыливается, да и самому спустя время проще поддерживать код со скобками чем без. Но откуда мы знаем с квалификатором объявлена переменная GSM_State_Mashine или без. Поэтому предположил что ситуация возможна. ТС в первом же сообщении указал в конце. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 2 августа, 2017 Опубликовано 2 августа, 2017 · Жалоба Весьма запутано, постараюсь объяснить. 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();// Так у вас там два раза объявляется переменная с одним именем T. И вообще, хоть C99+ позволяет объявлять переменные не в самом начале блока, я бы синтаксически избегал такие вольности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 2 августа, 2017 Опубликовано 2 августа, 2017 · Жалоба Это обсуждение курсовой 2 курса ? Какая то чушь. Изучите книжку по С, возьмите JLink и посмотрите - где в Ваших знаниях пробелы. Потом исправьте и посмотрите ещё раз. Обычно 2-х итераций хватает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 6 августа, 2017 Опубликовано 6 августа, 2017 (изменено) · Жалоба Не оптимизация и ничего таккого. В функции GPRSConnect есть вызов itoa1(port, num);. Поскольку этой функции нет в библиотеке, я взял что - то подобное в Сети. С ней что - то не так, поскольку как только я блокирую этот вызов (не забыв в GPRSConnect поставить выход с положительным результатом return 1), машина состояний исправно переходит на следующий шаг. Вот с этой функцией что - то не так: //--------------------------------------------------------------------------------------------------- void reverse(char s[]) //reverse: переворачиваем строку s на месте { // int i, j; // char c; // for (i = 0, j = strlen(s)-1; i<j; i++, j--) { // c = s[i]; // s[i] = s[j]; // s[j] = c; // } // } // //--------------------------------------------------------------------------------------------------- void itoa1(int n, char s[]) //itoa: конвертируем n в символы в s { // int i, sign; // if ((sign = n) < 0) //записываем знак n = -n; //делаем n положительным числом i = 0; // do //генерируем цифры в обратном порядке { // s[i++] = n % 10 + '0'; //берем следующую цифру }while ((n /= 10) > 0); //удаляем if (sign < 0) // s[i++] = '-'; // s[i] = '\0'; // reverse(s); // } // Попробую другие варианты из https://electronix.ru/forum/index.php?showt...=142582&hl= С ней все так. Эта функция преобразует номер порта 1883 в текст. Так вот, в вызове itoa1(port, num); под нее объявлен массив char num[4]; А нужно 5. Вероятно не хватило места для нуля. При объявлении char num[5]; все заработало исправно. Изменено 6 августа, 2017 пользователем Димон Безпарольный Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 6 августа, 2017 Опубликовано 6 августа, 2017 · Жалоба Говнокод из интернета, экономия на спичках байтах, причем скорее всего в стеке. Рисковый вы человек. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться