Алексей ВМ 0 18 августа, 2020 Опубликовано 18 августа, 2020 (изменено) · Жалоба Добрый день! Имеется STM32F4 с FreeRTOS и lwIP на борту. Передаю данные с использованием PPP и USB модема. Передача реализована с помощью сокетов. Возникает ситуация, когда при таймауте ответа от сервера размер используемой кучи lwIP начинает расти, и в конце концов tcp_write() не хватает памяти для размещения очередного сегмента: tcp_write(pcb=20015730, data=20001950, len=2466, apiflags=1) tcp_write: queueing 6720:8080 mem_malloc: could not allocate 1436 bytes tcp_write : could not allocate memory for pbuf copy size 1106 Кто не чистит за собой память? Проблема возникает, если данные не влезают в один сегмент. Изменено 18 августа, 2020 пользователем Алексей ВМ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба А модель памяти у FreeRTOS какая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ 0 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба heap_4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба А если еще выделить памяти чуть под кучу? (А сколько вообще выделили?) Не так уж и много просит. И как следует протестировать. Узкое место возможно в др. месте найдется. Сокеты видимо в состоянии ожидания и еще они не закрылись уже новые открываются. 42 минуты назад, Алексей ВМ сказал: и USB модема. А это как? У Вас МК в режиме хоста и к нему подключен сабж? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ 0 18 августа, 2020 Опубликовано 18 августа, 2020 (изменено) · Жалоба Выделение памяти не помогает, выделено 8К, если нет таймаутов, то максимум требуется 4К. Да, МК - хост, модем подключен девайсом. Такое впечатление, что где-то утечка памяти, но как её выявить непонятно. Изменено 18 августа, 2020 пользователем Алексей ВМ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба 1 hour ago, Алексей ВМ said: Выделение памяти не помогает, выделено 8К, если нет таймаутов, то максимум требуется 4К. Да, МК - хост, модем подключен девайсом. Такое впечатление, что где-то утечка памяти, но как её выявить непонятно. сокеты закрываются нормально? в пул возвращаются? в стэке lwip куска кода не было для этого. можно дописать (там один иф) или как народ - два раза два раза закрывает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ 0 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба lwip 2.1.2 9 minutes ago, kolobok0 said: сокеты закрываются нормально? в пул возвращаются? в стэке lwip куска кода не было для этого. можно дописать (там один иф) или как народ - два раза два раза закрывает... можно чуть подробнее, если не сложно. Как понять, что сокет норм закрылся? И где чего дописать, чтоб наверняка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба 4 часа назад, Алексей ВМ сказал: Выделение памяти не помогает, выделено 8К, если нет таймаутов, то максимум требуется 4К. Да, МК - хост, модем подключен девайсом. Такое впечатление, что где-то утечка памяти, но как её выявить непонятно. Маловато все-таки. И еще у Вас USB хост тут. А я где-то читал, что FreeRTOS при heap_4 макс. может использовать 32КБ памяти. Если кто в курсе, то пожалуйста пусть поправят, то что выделил до этого. И поэтому я перешел на heap_5. Может и Вам попробовать? А насчет утечек памяти тут - ничего толком не могу посоветовать. Может логирование/какой-то трассировщик использовать. Когда кто-то "берет" и "отдает" память, то тут же пишем. Но Вы уже нашли место где недостача памяти происходит - это уже полдела. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба Не очень понятно почему нельзя посмотреть лог и проверить, что на mem_malloc есть парный mem_free. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба 8 минут назад, x893 сказал: Не очень понятно почему нельзя посмотреть лог и проверить, что на mem_malloc есть парный mem_free. Может потому, что кроме утечек памяти, может иметь место ещё и фрагментация. Поэтому утечек может и не быть, а выделять уже нечего. ЗЫ: Имхо с таким объёмом ОЗУ (8К) - всяким "кучам" в проекте не место. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба 2 minutes ago, jcxz said: Может потому, что кроме утечек памяти, может иметь место ещё и фрагментация. Поэтому утечек может и не быть, а выделять уже нечего. Вполне возможно, но если размер одинаковый, то утечка более вероятна. Но опять же в логе это всё записано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба 4 минуты назад, x893 сказал: Вполне возможно, но если размер одинаковый, то утечка более вероятна. А где там одинаковый? Уже из первого сообщения видно два разных выделяемых размера. А что там ещё автор выделяет - только ему известно (или неизвестно ) А у него там и FreeRTOS (видимо с дин.стеками?) и USB-хост (использует кучу?). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба 8 минут назад, jcxz сказал: кроме утечек памяти, может иметь место ещё и фрагментация. Поэтому утечек может и не быть, а выделять уже нечего Согласен! Как я про фрагментацию тоже забыл. И тут причем требуется немалый кусок памяти (1436 байт) выделять сразу. И тут скорее всего у ТС и есть этот вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба 1 minute ago, jcxz said: А где там одинаковый? Уже из первого сообщения видно два разных выделяемых размера. А что там ещё автор выделяет - только ему известно (или неизвестно ) А у него там и FreeRTOS (видимо с дин.стеками?) и USB-хост (использует кучу?). Для этого есть лог. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 18 августа, 2020 Опубликовано 18 августа, 2020 · Жалоба 5 hours ago, x893 said: Для этого есть лог. Обращения к самой куче не логируются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться