Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Cетевые протоколы и технологии

Cетевые протоколы и технологии TCP/IP стек

Ответ
 
Опции темы Опции просмотра
Старый 27.10.2017, 11:18   #1
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 43
Сообщений: 269
Вес репутации: 617/39
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию LwIP, Netconn API, TCP/IP, клиент. Периодически не возвращается из функции netconn_write().

Уважаемые коллеги. Очень нужна помощь. Реализован протокол ModbusTCP:
Код:
... установка соединения с сервером
// Задаем таймаут для функции netconn_recv() 
netconn_set_recvtimeout(Connection_dsc,TIMEOUT_RESPONSE_FRAME);
// Цикл обмена с сервером
while(1)
	{
	// Читаю очередь с данными для отправки серверу
	xQueueReceive(Queue_xxx,(void*)(&p_v),portMAX_DELAY);
	// Заполняю переменную колличества байт для передачи
	counter_byte=htons(((MBAP_HEADER*)(p_v))->length)+6;
	// Передаю Modbus TCP фрейм
	if(netconn_write(Connection_dsc,p_v,counter_byte,NETCONN_NOCOPY)!=ERR_OK)
		{
		osDelay(100);
		continue;
		}
	// Ожидание ответного Modbus TCP фрейма в течении TIMEOUT_RESPONSE_FRAME ms
	if(netconn_recv(Connection_dsc,&Rx_netbuf)!=ERR_OK)
		{
		// Нет ответного фрейма в течении TIMEOUT_RESPONSE_FRAME ms
		osDelay(100);
		continue;
		}
	// Инициализируем переменные p_v,counter_byte
	netbuf_data(Rx_netbuf,&p_v,&counter_byte);
	// Анализ ответного фрейма
	help_var_ch=((FRAME_ALL_POINTS*)(p_v))->function_code;
	// Высвобождаем память (данные от клиента больше не нужны)
	netbuf_delete(Rx_netbuf);
	if(help_var_ch!=WRITE_FUNCTION)
		{
		// Запрос на запись не прошел
		
		}
	}
Может день работать, а может 15 минут, после чего не возвращается из функции netconn_write(). Может кому нибудь бросится в глаза какая нибудь неточность.
Беда в том, что очень редко и непериодически (случайным образом) возникает эта ситуация. Второй день сижу с Wireshark в пустую. Есть предположение, что началось это после того, как struct netconn* Connection_dsc; и struct netbuf* Rx_netbuf; сделал
локальными переменными в задаче. Но неуверен.
Заранее спасибо!
Pasha_Bi вне форума   Ответить с цитированием
Старый 27.10.2017, 16:11   #2
bzx
Senior Member
 
Аватар для bzx
 
Регистрация: 25.02.2007
Адрес: St. Petersburg
Возраст: 44
Сообщений: 449
Вес репутации: 1095/54
bzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud of
Отправить сообщение для bzx с помощью ICQ Отправить сообщение для bzx с помощью Skype™
По умолчанию Re: LwIP, Netconn API, TCP/IP, клиент. Периодически не возвращается из функции netconn_write().

Цитата:
Сообщение от Pasha_Bi Посмотреть сообщение
...Есть предположение, что началось это после того, как struct netconn* Connection_dsc; и struct netbuf* Rx_netbuf; сделал
локальными переменными в задаче. Но неуверен...
Возможно, оперативка используется у Вас по максимуму и происходит наложение переменных. Посмотрите внимательно при сборке проекта ворнинги. Попробуйте создать тестовый проект - убрать по максимуму переменных в рам и посмотрите за стабильностью.
Или же попробуйте под отладчиком поймать те функции, которые обращаются к критически важной Вашей структуре.
__________________
Для связи email: info собака qbit.su
bzx вне форума   Ответить с цитированием
Старый 28.10.2017, 08:19   #3
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 43
Сообщений: 269
Вес репутации: 617/39
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: LwIP, Netconn API, TCP/IP, клиент. Периодически не возвращается из функции netconn_write().

Спасибо за ответ. Нехватка стека задачи - первое что и мне пришло в голову. Увеличил неприлично даже. Не тут!
Pasha_Bi вне форума   Ответить с цитированием
Старый 28.10.2017, 08:28   #4
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 43
Сообщений: 269
Вес репутации: 617/39
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: LwIP, Netconn API, TCP/IP, клиент. Периодически не возвращается из функции netconn_write().

У меня еще одна задача - UDP сервер, там довольно плотный трафик. Вчера "гонял" без этой задачи, за 8 часов не проявилась проблема. Вот вся беда в том, что я не могу сделать однозначного вывода! Не проявилась за 8 часов... Что это значит? Ничего.
Я вот думаю что в понедельник принципиально перепишу на сокеты, протестирую... Так не люблю оставлять непонятки, но видимо придется.
Pasha_Bi вне форума   Ответить с цитированием
Старый 10.11.2017, 13:59   #5
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 43
Сообщений: 269
Вес репутации: 617/39
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: LwIP, Netconn API, TCP/IP, клиент. Периодически не возвращается из функции netconn_write().

Боюсь сглазить, но кажется нашел я проблему. В файле lwipopts.h:
Код:
// Эта автоподстановка включает критические секции при выделении памяти (при использовании многозадачных систем. По умолчанию - 0
#define SYS_LIGHTWEIGHT_PROT		1
У меня этой автоподстановки в файле lwipopts.h не было, в файле opt.h:
Код:
#ifndef SYS_LIGHTWEIGHT_PROT
#define SYS_LIGHTWEIGHT_PROT            0
#endif
Надеюсь мой опыт кому нибудь пригодится. Спасибо всем, кто хотел помочь.
Pasha_Bi вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LwIP, Netconn API, TCP/IP соединение. Как узнать порт подключившегося клиента? Pasha_Bi Cетевые протоколы и технологии 3 10.11.2017 14:16
что за зверь - Скатерограмма Edua Общетехнические вопросы 17 01.03.2013 23:33
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39


Часовой пояс GMT +3, время: 20:30.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot