Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Создание-удаление задач
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
MiklPolikov
Уже в который раз поднимаю тему динамического создания-удаления задач. Вот к чему пришёл:

Для того что бы это стабильно работало, стек у всех задач должен быть одного размера. Если он разный, то куча будет сегментироваться, и через какое-то время это приведёт к краху системы. Ни одна из стандартных схем выделения памяти не heap1 .... heap5 не реализует дефрагментацию кучи. Получается не очевидное сразу ограничение : "динамическое сознание и удаление требует одинаковый размер стека всех задач"
_Pasha
В самом общем случае куча может быть дефрагментирована только одним способом: если для доступа к области динамической памяти используется исключительно двойной указатель (указатель на указатель)
zltigo
QUOTE (MiklPolikov @ Nov 8 2015, 18:34) *
Для того что бы это стабильно работало, стек у всех задач должен быть одного размера. Если он разный, то куча будет сегментироваться, и через какое-то время это приведёт к краху системы.

Или примено одного - не отличающегося более, чем вдвое. Ну и радикально проблема решается тем, что при проектировании системы есть проход через фазу кода все "временые" задачи убиты. Ведь они на то и временые что-бы не сущесвовать сколь-нибудь долго, иначе незачем их прибивать.
MiklPolikov
Цитата(zltigo @ Nov 8 2015, 22:08) *
Ну и радикально проблема решается тем, что при проектировании системы есть проход через фазу кода все "временые" задачи убиты. Ведь они на то и временые что-бы не сущесвовать сколь-нибудь долго, иначе незачем их прибивать.


Как это решит проблему, если все стандартные системы выделения памяти heap1...heap5 не умеют дефрагментировать кучу, т.е. не умеют склеивать стоящие рядом пустые куски кучи ? Ни чем не занятая куча так и останется разбита на куски.
zltigo
QUOTE (MiklPolikov @ Nov 8 2015, 23:15) *
Как это решит проблему, если все стандартные системы выделения памяти heap1...heap5...

Почти первое, что я сделал во FreeRTOS много лет назад, это похерил то уродство, что было в нем менеджером памяти. Так что там дальше городили до heap5 мне неведомо, но нет нималейших причин зачем-то пытаться использовать негодные вещи - ничего не мешает иметь и склеивание и хоть сколь-нибудь разумные алгоритмы поиска свободного блока. Свой менеджер памяти на форуме выкладывал. Он и ВСЮ оставшуюся память сам забирает под распределение и блоки склеивает...
den_po
Цитата(MiklPolikov @ Nov 9 2015, 00:15) *
Как это решит проблему, если все стандартные системы выделения памяти heap1...heap5 не умеют дефрагментировать кучу, т.е. не умеют склеивать стоящие рядом пустые куски кучи ?

Как это не умеют?
AlexandrY
Цитата(den_po @ Nov 9 2015, 11:15) *
Как это не умеют?


Недавно наткнулся на такой момент в одном менеджере памяти - umm_malloc
Опенсорсный, может и FreeRTOS его позаимствовала.
Так там пока не сделаешь первое выделение и освобождение блока на весь объем памяти, этот менеджер довольно хитро работал.
Он не объединял свободную память если освобождаемые блоки в какой-то момент превышали определенный размер.
Очень знатный баг, но разбираться не стал.
AlexandrY
Кстати, нынче модно вот такой менеджер применять - http://tlsf.baisoku.org/
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.