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

 
 
> FreeRTOS + lwIP, Ошибка выделения памяти
_Mikhail_
сообщение Feb 4 2015, 09:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 19-04-11
Пользователь №: 64 477



Добрый день!
Имеются FreeRTOS 8 + lwIP 1.4.1 + LPC2478.
Столкнулся с такой проблемой. Работаю через Netconn API. Шлю на плату TCP пакеты (утилитой netcat передаю файлы по X Мб). Какое-то время пакеты проходят через стек нормально (10...20...40 Мб). Но в какой-то момент времени стек все чаще и чаще начинает выдавать отказ в выделении памяти под принятый пакет (memp_malloc_fn), пока прием совсем не "захлебывается". При этом передача от платы через другое соединение работает нормально. Принятые пакеты netconn_recv не обрабатываю, а просто отбрасываю (пока), затем удаляю буфер netbuf_delete. Стеки, кучи операционки большие и пустые. В lwipopts.h тоже памяти выделено достаточно. Стек по какой-то причине выделяет больше пулов, чем освобождает. Причину утечки никак найти не могу. На вход стека с mac пакеты выдаю корректные (по крайней мере так думаю).
Может кто сталкивался с подобной проблемой, в каком направлении копать?

Прикрепленный файл  ethernetif.zip ( 1.65 килобайт ) Кол-во скачиваний: 85
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
den_po
сообщение Feb 9 2015, 11:48
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Память выделяется с помощью pvPortMalloc?
Go to the top of the page
 
+Quote Post
_Mikhail_
сообщение Feb 9 2015, 13:54
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 19-04-11
Пользователь №: 64 477



Цитата(den_po @ Feb 9 2015, 15:48) *
Память выделяется с помощью pvPortMalloc?


На сколько я понял, то LwIP имеет свой механизм выделения памяти. При беглом просмотре он потокобезопасен.

В том варианте, в каком я использую стек, он выделяет память единожды, а потом выделяет/освобождает пулы под/от данные, не пользуясь функциями типа malloc. Я в этот механизм не вмешиваюсь. У меня получается, что заканчиваются свободные пулы при p = pbuf_alloc( PBUF_RAW, len, PBUF_POOL ) (и дальше по цепочке до memp_malloc_fn).

Но пробовал и другие варианты, результат аналогичен.

Мне кажется, что проблема явно не в самом стеке, а в его порте (emac.c, ethernetif.c) или я что-то не правильно настроил в lwipopts.h

Go to the top of the page
 
+Quote Post
den_po
сообщение Feb 9 2015, 14:31
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Цитата(_Mikhail_ @ Feb 9 2015, 18:54) *
На сколько я понял, то LwIP имеет свой механизм выделения памяти.

В общем да, но зависит от.
На всякий случай можно перепроверить константы MEM_* и MEMP_*
lwip\src\include\lwip\opt.h
lwipopts.h
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:45
Рейтинг@Mail.ru


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