我正在使用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分配内存?
提前感谢您的帮助。
费德里科
答案 0 :(得分:1)
步骤1: 如下所示在源代码中包装calloc和免费函数。
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);
}