首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMSIS FreeRTOS动态分配

CMSIS FreeRTOS动态分配
EN

Stack Overflow用户
提问于 2018-02-28 19:57:15
回答 1查看 621关注 0票数 2

我在一个嵌入式系统上工作,它使用带有heap4的CMSIS FreeRtos作为内存管理方案。

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

mbedTLS需要两个函数来分配和释放内存。以下是mbedTLS所需的函数原型:

代码语言:javascript
复制
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分配内存呢?

提前感谢你的帮助。

费德里科

EN

回答 1

Stack Overflow用户

发布于 2020-02-27 20:12:29

步骤1:在源代码中创建calloc和free函数的包装器,如下所示。

代码语言:javascript
复制
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,如下所示。

代码语言:javascript
复制
void Custom_MBEDTLS_Init(void)
{
    mbedtls_platform_set_calloc_free(&pvWrap_mbedtls_calloc, &vWrap_mbedtls_free);
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49029042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档