完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
当堆内存不足时,该函数mbedtls_ssl_write永远卡住,大约3-4kb的堆。ssl_write将永远阻塞,直到您重置设备,它仅在堆内存不足时发生。当写入永远阻塞时,中断仍然有效。请进行调查。
File -> RTOS_SDKthird_partymbedtlslibraryssl_tls.c Function -> int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ) Digging a little bit more on the issue, I've added vPortEnterCritical() and vPortExitCritical between the "ssl_write" call, then the code always crashes and prints ShowCritical:1 message on the uart. |
|
相关推荐
1个回答
|
|
在这种情况下,我们需要解决mbedtls_ssl_write函数在堆内存不足时卡住的问题。以下是一些可能的解决方案:
1. **增加堆内存大小**:首先,检查当前的堆内存大小是否足够。如果不够,可以考虑增加堆内存的大小。这可以通过修改RTOS配置文件或编译器设置来实现。 2. **优化内存使用**:检查代码中是否有内存泄漏或不必要的内存分配。使用内存分析工具(如Valgrind)来检测内存泄漏,并优化代码以减少内存使用。 3. **使用动态内存分配**:如果可能,尝试使用动态内存分配而不是静态分配。这样可以在运行时根据需要分配内存,从而减少内存不足的风险。 4. **限制写入数据的大小**:在调用mbedtls_ssl_write之前,检查要写入的数据大小,并确保它不会超过堆内存的限制。如果数据太大,可以考虑将其分成较小的部分,然后逐个发送。 5. **使用临界区保护**:在调用mbedtls_ssl_write之前和之后使用临界区保护(如vPortEnterCritical和vPortExitCritical)。这可以确保在写入操作期间不会发生内存分配或释放,从而避免死锁。 6. **实现内存回收机制**:在应用程序中实现内存回收机制,以便在不再需要内存时释放它。这可以通过定期检查不再使用的内存并释放它来实现。 7. **监控内存使用情况**:在应用程序中添加内存使用监控功能,以便在内存不足时及时采取措施。这可以通过定期检查内存使用情况并发出警告来实现。 8. **优化mbedtls库**:检查mbedtls库的配置,看看是否有优化内存使用的方法。例如,可以尝试使用更小的加密算法或减少缓存大小。 9. **考虑使用其他SSL库**:如果mbedtls库的内存使用问题无法解决,可以考虑使用其他SSL库,如OpenSSL或WolfSSL,这些库可能在内存使用方面更优化。 通过以上方法,可以有效地解决mbedtls_ssl_write在堆内存不足时卡住的问题。在实施这些解决方案时,请确保充分测试以确保它们不会引入新的问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
1143 浏览 1 评论
582浏览 6评论
480浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
464浏览 5评论
466浏览 4评论
441浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 13:45 , Processed in 0.888442 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号