Разпределение и безплатно в Micriμm μC/OS-III RTOS

Ние използваме μC/OS-III RTOS на Micrium с RX62N на Renesas.

Изградихме система, в която трябва динамично да разпределяме и освобождаваме данни. Открихме, че функциите malloc() и free() не работят добре с RTOS. Въпреки това RTOS има персонализирана функция за това; функцията Mem_HeapAlloc(). Тази функция заделя част от паметта на 'heap', направена от RTOS. Проблемът е, че няма безплатна функция, вероятно защото всичко отива в heap pool.

В RTOS също е възможно да се направи пул. Проблемът на този пул е, че всички съдържащи се блокове трябва да са с еднакъв размер. Тъй като разпределяме и освобождаваме различни размери, това не е добро решение за нас.

Намерихме документ, който описва RTOS функциите на паметта ТУК Глава 4 описва функциите.

Някой има ли идея как можем да поправим този проблем?

Някои решения вече имахме

  • Направете всички размери на блоковете същите като най-голямото разпределение. Имаме много режийни разходи, тъй като най-малкото и най-голямото разпределение се различават много.
  • Не правете безплатно. Това не е решение, ще има изтичане на памет.

Надяваме се, че някой може да ни помогне. Ако нещо не е ясно, моля, попитайте ме

Благодаря предварително


person Hendrik    schedule 23.05.2012    source източник


Отговори (1)


  • you can allocate your objects in multiples of block sizes.

Все още ще имате известна вътрешна фрагментация, поради която няма да можете да използвате напълно наличното пространство.

Все още ще имате следните предимства, като използвате пулове памет

  • Пуловете памет позволяват разпределение на памет с постоянно време за изпълнение (без фрагментация). Освобождаването на паметта за хиляди обекти в пул е само една операция, а не една по една, ако malloc се използва за разпределяне на памет за всеки обект.

  • Пуловете памет могат да бъдат групирани в йерархични дървовидни структури, което е подходящо за специални програмни структури като цикли и рекурсии.

  • Пуловете с блокова памет с фиксиран размер не трябва да съхраняват метаданни за разпределение за всяко разпределение, описвайки характеристики като размера на разпределения блок. Особено за малки разпределения, това осигурява значително спестяване на пространство.

person ravi    schedule 23.05.2012
comment
Разпределяме място за структури, така че разпределението трябва да продължи. - person Hendrik; 23.05.2012
comment
Предполагам, че би било отговорност на мениджъра на купчина, който използвате, за да разделите разпределението на вашата структура в множество обекти. - person ravi; 23.05.2012
comment
Ние всъщност не използваме мениджър на купчина, пространството се предоставя само от функциите на RTOS и те не поддържат никаква администрация. - person Hendrik; 23.05.2012