Easyelectronics.ru

Электроника для всех
Текущее время: 08 мар 2021, 08:42

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Снова vTaskDelete(NULL);
СообщениеДобавлено: 26 мар 2020, 15:13 
Только пришел

Зарегистрирован: 14 мар 2018, 17:32
Сообщения: 24
Перечитал все сообщения на тему удаления задач, у меня немного иное:
Есть проблема с удалением задачи-обработчика клиента TCP:
На STM32F407 стоит FreeRTOS и LwIP. Работает TCP-сервер, клиенты подключаются-отключаются корректно, задача при подключении клиента создается, при отключении - удаляется, память возвращается. Все нормально где-то с пол-дня.
Затем (по непонятным причинам) через много часов правильной работы, при отключении клиента - задача не удаляется.
Висит в TaskList как 'Deleted' при этом память не возвращается. Дальнейшее подключение-отключение TCP клиентов плодит "Зомби" и жрет память. И так до нуля - затем висяк.

tcpThread.B.2.42.23
tcpThread.D.2.85.43
tcpThread.D.2.69.33
tcpThread.D.2.81.45
tcpThread.D.2.83.47
tcpThread.D.2.85.37
tcpThread.D.2.86.49
tcpThread.D.2.83.39
tcpThread.D.2.83.51
tcpThread.D.2.85.53
tcpThread.D.2.69.35
tcpThread.D.2.85.41

Создаю задачи так:
Код:
xTaskCreate( ServerThread, "tcpThread", configMINIMAL_STACK_SIZE*2, newconn, tskIDLE_PRIORITY+2, NULL);


Удаляются задачи по разрыву соединения.

Подскажите где посмотреть проблему.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Снова vTaskDelete(NULL);
СообщениеДобавлено: 27 мар 2020, 11:32 
Только пришел

Зарегистрирован: 14 мар 2018, 17:32
Сообщения: 24
И как дополнение: задача Idle останавливается (не получает время) хотя TaskList сообщает что все нормально: "IDLE .R.0.103.21"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Снова vTaskDelete(NULL);
СообщениеДобавлено: 27 мар 2020, 14:07 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 868
Рискну задать вопросы.

Какой распределитель памяти используется? Что показывает переменная (нет документации под рукой, чтобы правильно указать имя), содержащая размер доступной памяти?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Снова vTaskDelete(NULL);
СообщениеДобавлено: 27 мар 2020, 14:54 
Только пришел

Зарегистрирован: 14 мар 2018, 17:32
Сообщения: 24
Использую память heap_4, а размер свободной памяти heap = xPortGetFreeHeapSize();

Может кто подскажет, где в LwIP проверить все ли дыры заделаны?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Снова vTaskDelete(NULL);
СообщениеДобавлено: 30 мар 2020, 22:56 
Только пришел

Зарегистрирован: 14 мар 2018, 17:32
Сообщения: 24
Проблема решилась.
Одна из задач со временем зацикливалась наглухо, так что до IDLE не доходило свободных тиков и как результат не освобождалась память.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Снова vTaskDelete(NULL);
СообщениеДобавлено: 31 мар 2020, 11:15 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 868
Gomer888 писал(а):
Проблема решилась.
Одна из задач со временем зацикливалась наглухо, так что до IDLE не доходило свободных тиков и как результат не освобождалась память.

Можно чуть подробней?
То есть задачи удалялись из IDLE?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Снова vTaskDelete(NULL);
СообщениеДобавлено: 31 мар 2020, 11:19 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Ну да, по затее FreeRTOS, такие операции подчистки памяти выполняются внутри ядра ОС и проводятся именно в idle.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Снова vTaskDelete(NULL);
СообщениеДобавлено: 31 мар 2020, 11:45 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 868
BusMaster писал(а):
Ну да, по затее FreeRTOS, такие операции подчистки памяти выполняются внутри ядра ОС и проводятся именно в idle.

Хм, но ведь idle() имеет наинизший приоритет, и если высоприоритетные задачи не отдают время системе, то некому будет чистить память. Получается, что если в системе идёт активное создание-удаление задач, то удалять задачи внутри idle() нехорошо.


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


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


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

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


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

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

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