2

我正在开发一个嵌入式系统,该系统具有 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 分配内存?

在此先感谢您的帮助。

费德里科

4

1 回答 1

1

第 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);
} 
于 2020-02-27T12:12:28.557 回答