Не оптимизация и ничего таккого. В функции 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]; все заработало исправно.
Сообщение отредактировал Димон Безпарольный - Aug 6 2017, 15:11