Ние използваме μC/OS-III RTOS на Micrium с RX62N на Renesas.
Изградихме система, в която трябва динамично да разпределяме и освобождаваме данни. Открихме, че функциите malloc() и free() не работят добре с RTOS. Въпреки това RTOS има персонализирана функция за това; функцията Mem_HeapAlloc(). Тази функция заделя част от паметта на 'heap', направена от RTOS. Проблемът е, че няма безплатна функция, вероятно защото всичко отива в heap pool.
В RTOS също е възможно да се направи пул. Проблемът на този пул е, че всички съдържащи се блокове трябва да са с еднакъв размер. Тъй като разпределяме и освобождаваме различни размери, това не е добро решение за нас.
Намерихме документ, който описва RTOS функциите на паметта ТУК Глава 4 описва функциите.
Някой има ли идея как можем да поправим този проблем?
Някои решения вече имахме
- Направете всички размери на блоковете същите като най-голямото разпределение. Имаме много режийни разходи, тъй като най-малкото и най-голямото разпределение се различават много.
- Не правете безплатно. Това не е решение, ще има изтичане на памет.
Надяваме се, че някой може да ни помогне. Ако нещо не е ясно, моля, попитайте ме
Благодаря предварително