Easyelectronics.ru

Электроника для всех
Текущее время: 05 июн 2020, 15:50

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос про отвал сети в F7 на FreeRtos + LwIp + Калокуб
СообщениеДобавлено: 28 фев 2020, 20:41 
Заглядывает иногда

Зарегистрирован: 06 май 2015, 11:00
Сообщения: 34
Здравствуйте коллеги.

Недавно столкнулся с ситуацией, которая в конец вынесла мне мозг. Начнем с начала.

Есть железка на F767, которая общается с удаленным серваком через интернет и обменивается с ним информацией порядка 30 раз в час. Установили соединение -> обменялись любезностями -> разорвали соединение. Помимо удаленного сервака частенько ведет обмен информацией по локалке. Раз в сутки железка перезагружается по питанию, т.к. питание попросту отключают, да и в это время нет необходимости железке работать. Работает на связке FreeRTOS + LwIP, все стандартно. Все это поднято давным давно через калокуб на скорую руку.
Так вот, недавно возникла необходимость данную железку законнектить на другой сервак, который в момент тестов оказался выключенным. Железка пытается установить соединение, там тишина. На этот случай в прошивке предусмотрена попытка повторного соединения с интервалом 5 секунд до того момента пока не подключится. И вот тут то всплыло оно самое (то что плавает), после нескольких попыток неудачного коннекта с удаленным серваком отваливается обмен данными с устройствами по локалке и не восстанавливается. Подцепился к железке, посмотреть что там происходит - все задачи работают, ни одна не зависла, но в ответ на попытки соединения по сети прилетают ошибки по таймауту.
Признаюсь честно, в LwIP никогда не углублялся, т.к. не было особой нужды и главное свободного времени на это, и как следствие непонимание куда сейчас копать в поисках решения вопроса. Есть подозрение, что где-то происходит утечка памяти и как следствие в один прекрасный момент начало тупняков. Взаимодействие с внешним миров организовано через Netconn.
Участок кода:
conn = netconn_new(NETCONN_TCP);
if (conn != NULL)
{
err = netconn_bind (conn, NULL, Port2);
if (err == ERR_OK)
{
err = netconn_connect (conn, &ServerIPaddr, 1234);

if (err == ERR_OK)
{
// Работаем, если все ОК
}
}
}
netconn_close (conn);
netconn_delete (conn);

И гоняем этот код по кругу если не удачное соединение. Port2 на каждом новом соединении меняю на другой иначе выдает ошибку, что данный порт уже используется. Он не сразу удаляется, а секунд через 20 после закрытия соединения.

В попытках найти решение этого вопроса возникли еще несколько, которые меня наталкивают на мысль что надо "учиться и еще раз учиться".
А именно: в файле линковщика мы указываем объем памяти, который должен быть выделен на HEAP и STACK. Я почему-то всегда предполагал, что под LwIP HEAP выделяется отдельно из оставшейся свободной памяти МК, как и под FreeRTOS. Но проводя генерацию кода в stm32CubeIDE с разным значением хипа в настройках LwIP итоговый объем занятой памяти никак не изменяется. Что вызывает вопрос: данная память выделяется что-ли из той, которую мы задаем в файле линковщика? Или это я совсем туплю уже?

Есть ли краткая шпаргалка по корректной конфигурации LwIP, когда мы знаем сколько у нас планируется поддерживать соединений по TCP/IP , UDP. Параметров куча и все их изучать естественно смысла нет, т.к. там куда протоколов реализована. Наверняка все это ни раз разжевывалось, сам находил кучу каких-то огрызков и рекомендаций по этому вопросу. Но как-то особо не встречал ужатого материала по этому вопросу.

В общем жду комментариев по вышеизложенному с поливанием грязью (как это любят делать некоторые на данном ресурсе) и действительно полезных и адекватных, которые могут разжевать и разложить все по полочкам.

Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос про отвал сети в F7 на FreeRtos + LwIp + Калокуб
СообщениеДобавлено: 23 мар 2020, 22:23 
Заглядывает иногда

Зарегистрирован: 20 май 2015, 11:18
Сообщения: 96
Здравствуйте!
Поглядите сюда, в Errata sheet:
2.16.6 Ethernet erroneous data received in RMII configuration.
Workaround простой, надо сбросить счетчики:
Код:
if( received_bad_crc > RMII_BAD_CRC_THREASHOLD )
{

      /* reselect RMII */

      SYSCFG->PMC &= ~SYSCFG_PMC_MII_RMII_SEL;
      SYSCFG->PMC |= SYSCFG_PMC_MII_RMII_SEL;

      /* reset counters */
      ETH->MMCCR |= ETH_MMCCR_CR;

      ++rmii_restart_counter;

      return 1;

}

Насколько я знаю в кубах этих ваших его нет.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB