Выделение и освобождение в микроконтроллерах µC/OS-III

Мы используем ОСРВ µC/OS-III от Micrium с RX62N от Renesas.

Мы создали систему, в которой мы должны динамически размещать и освобождать данные. Мы обнаружили, что функции malloc() и free() плохо работают с ОСРВ. Однако в ОСРВ имеется специальная функция для этого; функция Mem_HeapAlloc (). Эта функция выделяет некоторую память для "созданной " кучи ОСРВ. Проблема в том, что у него нет свободной функции, вероятно, потому что все идет в пул кучи.

В ОСРВ также возможно сделать пул. Проблема этого пула в том, что все содержащие блоки должны быть одинакового размера. Поскольку мы выделяем и освобождаем разные размеры, это не очень хорошее решение для нас.

Мы нашли документ, который описывает функции RTOS памяти ЗДЕСЬ Глава 4 описывает функции.

Кто-нибудь знает, как мы можем решить эту проблему?

Некоторые решения у нас уже были

  • Сделайте все размеры блоков такими же, как самые большие. У нас много накладных расходов, поскольку самые маленькие и самые большие распределения сильно различаются.
  • Не делай бесплатно. Это не решение, будет утечка памяти.

Надеюсь, кто-нибудь может нам помочь. Если что-то не понятно, пожалуйста, спросите меня

заранее спасибо

1 ответ

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

У вас все еще будет некоторая внутренняя фрагментация, из-за которой вы не сможете полностью использовать доступное пространство.

Вы бы по-прежнему имели следующие преимущества при использовании пулов памяти

  • Пулы памяти позволяют распределять память с постоянным временем выполнения (без фрагментации). Освобождение памяти для тысяч объектов в пуле - это всего лишь одна операция, а не одна за другой, если для выделения памяти для каждого объекта используется malloc.

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

  • Пулы памяти блоков фиксированного размера не должны хранить метаданные выделения для каждого выделения, описывая такие характеристики, как размер выделенного блока. В особенности для небольших распределений это обеспечивает существенную экономию места.

Другие вопросы по тегам