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

 
 
> FreeRTOS + LwIP + PPP Как правильно переинициализировать соединение
=F8=
сообщение Jul 19 2013, 11:36
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Есть девайс с LPC2148 + GSM модуль. На девайсе используется связка FreeRTOS + IwIP + PPP(который входит в IwIP).
Столкнулся с проблемой при переинициализации PPP соединения, для простоты опишу порядок действий:

tcpip_init();

while(1){
Включаю и инициализирую gsm модуль.

pppInit(); Инициализирую соединение
pppSetAuth(); Устанавливаю параметры авторизации
pppOverSerialOpen(); Поднимаю соединение pppOverSerialOpen

Затем создаю и затем открываю серверное соединение;
netconn_new();
netconn_bind();
netconn_listen();

Жду входящего соединения;
if(netconn_accept() == ERR_OK)
{
Принимаю входящее соединение, начинаю передавать данные от мк компу,
и в этот момент откручиваю антенну от модуля, через 5-10 сек мк понимает что регистрация в сети потеряна.
После чего закрываю дочернее соединение.
netconn_delete(conn);
}
И затем серверное
netconn_delete(srv_conn);
И затем ppp
pppClose()

}

Так, вот на следующем цикле при выполнении netconn_bind получаю ответ ERR_USE. Если подождать около 90 сек то на следующий вызов netconn_bind получаю ответ ERR_OK. Т.е. такое впечатление, что lwip пытается передать непереданные пакеты из буфера, хотя соединение уже закрыто.
Есть ли какой-то способ полностью переинициализировать стек? Просто ждать крайне нежелательно...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jul 19 2013, 16:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Он не пакеты передает.

после того как вы вызывали netconn_delete, pppClose() оно не закрывается, а помечается на закрытие. В ЛвИП есть медленный таймер, вот именно он проверяет все открытые сессии и закрывает те что помечены как закрывающиеся. До этого момента все параметры соединения в общей таблице лежат, и при попытке сделать новое соединение получите сообщение что оно уже есть.

Go to the top of the page
 
+Quote Post
=F8=
сообщение Jul 20 2013, 13:52
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(Golikov A. @ Jul 19 2013, 19:09) *
В ЛвИП есть медленный таймер, вот именно он проверяет все открытые сессии и закрывает те что помечены как закрывающиеся.

Не думаю, что дело в этом. Во-первых эта ситуация возникает только при обрыве связи в момент передачи от мк к компу т.е. явно связана с наличием данных в буфере, во-вторых перезапуск gsm модуля дело не быстрое то-есть между попытками создать соединение проходит около 20-30 сек - вполне достаточно для отработки внутренних механизмов закрытия соединения.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 21:37
Рейтинг@Mail.ru


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