【发布时间】:2020-12-30 01:05:20
【问题描述】:
我正在使用 FreeRTOS V9.0.0 在 Marvell MW300 板上运行我的应用程序。 在我的应用程序中,当我尝试连接 HTTPS 服务器时,mbedtls 显示错误。
[wm_mbedtls] ssl_tls.c:5431: |1| 0x00121188: alloc(4429 in bytes) (4429 out bytes) failed.
在调试时,观察者发现这是由于堆内存不足造成的。这是堆内存统计数据
Heap size ---------------------- : 305536
Free size ---------------------- : 17888
Peak Heap Usage since bootup --- : 291048
Total allocations -------------- : 136
Failed allocations ------------- : 0
Min overhead per allocation ---- : 16
Biggest free block available now : 8040
在尝试连接我的 HTTPS 服务器之前,我会打印此堆内存信息。 据观察,当设备尝试连接 HTTPS 服务器时,mbedtls 想要分配两个 4429 字节的缓冲区(输入和输出),但由于可用的最大空闲块为 8040,因此失败 这是mbedtls的代码。
/*
* Prepare base structures
*/
if( ( ssl-> in_buf = mbedtls_calloc( 1, MBEDTLS_SSL_IN_BUFFER_LEN( ssl->conf ) ) ) == NULL ||
( ssl->out_buf = mbedtls_calloc( 1, MBEDTLS_SSL_OUT_BUFFER_LEN( ssl->conf ) ) ) == NULL )
{
MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d in bytes) (%d out bytes) failed", MBEDTLS_SSL_IN_BUFFER_LEN( ssl->conf ),
MBEDTLS_SSL_OUT_BUFFER_LEN( ssl->conf ) ) );
mbedtls_free( ssl->in_buf );
ssl->in_buf = NULL;
return( MBEDTLS_ERR_SSL_ALLOC_FAILED );
}
板载可用内存为 17888。 是否可以在“可用的空闲块”中添加一些“空闲内存”? 或者有什么建议,如何处理这个问题?
我正在使用堆 4 方案。
提前致谢。
【问题讨论】:
标签: heap-memory freertos