CMSIS FreeRTOS динамическое размещение

Я работаю над встроенной системой, которая имеет CMSIS FreeRtos с heap4 в качестве схемы управления памятью.

Теперь я пытаюсь перенести mbedTls на мою систему, и я должен предоставить функции динамического распределения, такие как alloc и free.

mbedTLS требует две функции для выделения и освобождения памяти. Вот прототипы функций, необходимые для mbedTLS:

void * (*mbedtls_calloc)( size_t, size_t ) = MBEDTLS_PLATFORM_STD_CALLOC;
void (*mbedtls_free)( void * )             = MBEDTLS_PLATFORM_STD_FREE;

int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ),
                              void (*free_func)( void * ) )

Какой лучший способ правильно использовать кучу, предоставляемую FreeRTOS? Пул памяти например.

Heap4 не предоставляет таких функций, как calloc и free. Итак, какую функцию я должен обернуть, чтобы позволить mbedTls выделять память?

Заранее спасибо за помощь.

Federico

0 ответов

ШАГ 1: Создайте оболочку из функций calloc и free в исходном коде, как показано ниже.

void *pvWrap_mbedtls_calloc( size_t sNb, size_t sSize )
{
    void *vPtr = NULL;
    if (sSize > 0) {
        vPtr = pvPortMalloc(sSize * sNb); // Call FreeRTOS or other standard API
        if(vPtr)
           memset(vPtr, 0, (sSize * sNb)); // Must required
    }
    return vPtr;
}

void vWrap_mbedtls_free( void *vPtr )
{
    if (vPtr) {
        vPortFree(vPtr); // Call FreeRTOS or other standard API
    }
}

ШАГ 2: Зарегистрируйте эти API во время инициализации вашего приложения, как показано ниже.

void Custom_MBEDTLS_Init(void)
{
    mbedtls_platform_set_calloc_free(&pvWrap_mbedtls_calloc, &vWrap_mbedtls_free);
} 
Другие вопросы по тегам