Embedded 动态分配

Embedded 动态分配,embedded,dynamic-memory-allocation,freertos,mbedtls,Embedded,Dynamic Memory Allocation,Freertos,Mbedtls,我正在开发一个嵌入式系统,它使用CMSIS FreeRtos和heap4作为内存管理方案 现在我正在尝试将mbedTls移植到我的系统,我必须提供动态分配函数,如alloc和free MBEDTL需要两个函数来分配和释放内存。 以下是mbedTLS所需的功能原型: void * (*mbedtls_calloc)( size_t, size_t ) = MBEDTLS_PLATFORM_STD_CALLOC; void (*mbedtls_free)( void * )

我正在开发一个嵌入式系统,它使用CMSIS FreeRtos和heap4作为内存管理方案

现在我正在尝试将mbedTls移植到我的系统,我必须提供动态分配函数,如alloc和free

MBEDTL需要两个函数来分配和释放内存。 以下是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提供的堆的最佳方法是什么? 例如,内存池

不提供calloc和free之类的函数。那么,我应该包装哪个函数来允许mbedTls分配内存呢

提前谢谢你的帮助

费德里科第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
    }
}
void Custom_MBEDTLS_Init(void)
{
    mbedtls_platform_set_calloc_free(&pvWrap_mbedtls_calloc, &vWrap_mbedtls_free);
} 
步骤2:在应用程序初始化时注册这些API,如下所示

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
    }
}
void Custom_MBEDTLS_Init(void)
{
    mbedtls_platform_set_calloc_free(&pvWrap_mbedtls_calloc, &vWrap_mbedtls_free);
} 

“像……这样的功能!”!?确切指定所需的函数,或提供指向您所参考的mbedTLS产品文档的链接。@Clifford我需要函数来分配和释放FreeRTOS中高效的内存。我不知道使用内存池是否是最好的选择。不是我所要求的。MBEDTL在语义上需要什么。您提到了分配、calloc和free,但说的“函数”类似于“意味着还有其他函数”。@Clifford我的问题很简单:如何在具有heap4 ad内存管理的FreeRTOS中分配动态内存?这是出于尊重,这不是你要的。您的编辑回答了我的问题,mbedTLS使用回调。freeRTOS中的内存分配功能已被记录在案,并且对所有方案都是通用的。您可能需要创建包装器来支持一些语义,例如calloc初始化。我努力想知道这个问题有什么不明显的地方。