Мы используем ОСРВ µC/OS-III от Micrium с RX62N от Renesas.
Мы построили систему, в которой мы должны динамически распределять и освобождать данные. Мы обнаружили, что функции malloc() и free() плохо работают с RTOS. Однако в RTOS для этого есть специальная функция; функцию Mem_HeapAlloc(). Эта функция выделяет часть памяти из 'кучи' ОСРВ. Проблема в том, что у него нет свободной функции, вероятно, потому, что все идет в пул кучи.
В ОСРВ тоже можно сделать пул. Проблема этого пула в том, что все содержащиеся в нем блоки должны быть одинакового размера. Так как мы выделяем и освобождаем разные размеры, это не очень хорошее решение для нас.
Мы нашли документ, в котором описаны функции памяти RTOS ЗДЕСЬ Глава 4 описывает функции.
Кто-нибудь знает, как мы могли бы решить эту проблему?
Некоторые решения, которые у нас уже были
- Сделайте все размеры блоков такими же, как у самого большого выделения. У нас много накладных расходов, так как наименьшее и самое большое выделение сильно различаются.
- Не делайте free. Это не решение, будет утечка памяти.
Надеюсь, кто-нибудь может нам помочь. Если что-то не понятно, спрашивайте
заранее спасибо