Я разрабатываю C-библиотеку для использования в uCOS-III. Процессор представляет собой ARM Cortex M4 SAM4C. В библиотеке я хочу использовать сторонний продукт X, конкретное имя которого здесь не имеет значения. Исходный код для X полностью доступен и компилируется без проблем.
Внутри X выполняется много операций выделения памяти с помощью calloc() и free(). Проблема в том, что простое использование malloc нецелесообразно для встраиваемых систем из-за фрагментации памяти. Документация для uCOS-III явно не рекомендует использовать malloc — вместо этого следует использовать OSMemCreate/OSMemGet/OSMemPut для выделения и освобождения фрагментов памяти из статически выделенного блока памяти.
Вопрос 1:
Каков общий совет, чтобы обойти «стандартную реализацию» malloc? Я бы предпочел своего рода malloc, где у меня есть доступ к фиксированному пулу памяти (например, выделенному для специальной задачи)
Вопрос 2:
Как правильно использовать OSMemCreate()? Сначала я должен инициализировать раздел памяти с определенным размером блока. Объем запрашиваемой памяти составляет от 4 байт до примерно 800 байт. Я могу получить блоки по запросу, но с фиксированным размером. Если размер блока = 4, я не могу выделить 16 байт, так как блоки не являются смежными в памяти. Если размер блока = 800, а мне нужно всего 4 байта, большая часть блока остается неиспользованной, и у меня очень скоро закончатся блоки.
Поэтому я не знаю, как решить мою первоначальную проблему с помощью OSMemCreate...
Может ли кто-нибудь дать мне совет, как я могу действовать?
Большое спасибо, Майкл