This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2642R:具有 OSAL 堆类型的 iCall_malloc()在一段时间内是否会出现堆内存碎片问题?

Guru**** 2539500 points
Other Parts Discussed in Thread: CC2642R

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1074017/cc2642r-whether-the-icall_malloc-having-osal-heap-type-can-have-heap-memory-fragmentation-issue-over-the-period-of-time

部件号:CC2642R
“线程:测试”中讨论的其它部件,

我们使用 SDK v5.10来开发基于 BLE 的应用程序。 为了实现动态内存分配,我们还在 继续使用我们的应用程序中 BLE 堆栈中提供的 iCall_malloc()和 iCall_free() API。

我们将定期跟踪应用程序中的堆使用情况,以评估堆内存使用情况。

但是,我们不是很确定 OSAL 堆内存是否定期处理堆内存碎片,以确保连续内存可用?  

如果一段时间内连续内存中有可用字节但没有可用字节,我们是否会遇到问题?

OSAL 堆内存分配和取消分配如何在内部工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我担心,只要堆中留有一些空间,就会执行动态分配,并且不会实施特定机制来避免碎片化。

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    克莱门特,您好!

    感谢您的回复。 那么,我们是否会遇到碎片问题,即使认为有可用字节,堆也不可用?

    我们正在使用 rtos_heaposal.h 上的“HEAPMGR_MEMALO”来分配当前内存。 它是提供非碎片连续内存还是仅提供总分配字节? 如果“HEAPMGR_MEMALO”不提供该信息,我们如何获得非碎片连续可用内存?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我可以获得任何文档来了解 OSAL 内存管理的工作原理? 以下链接以外的任何文档?

    software-dl.ti.com/.../memory_management.html

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Mehul,

    iCall_malloc()确实分配了连续内存。 对于动态分配内存的任何系统,如果没有足够长的连续内存块可供分配,则问题可能在很长时间后出现。
    应用程序无法使用任何命令来查找连续可用内存的数量。

    如果您的应用程序分配了大量内存(特别是具有不同大小的大分配),则可能需要使用一些静态分配。 它不会完全解决问题,因为堆栈将继续使用动态分配。

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    克莱门特,您好!

    是的,在应用程序中,我们正在进行合理的内存分配。 但 BLE 堆栈也是如此。 BLE 堆栈是否使用 iCall_malloc()分配内存的任何特定方式来避免碎片化?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    堆栈的开发考虑到了这些因素。 此外,我们还会进行几天的耐力测试。

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    克莱门特,您好!

    抱歉,您能否详细阐述您的声明:“堆栈的开发考虑到了这些因素。  ”。 您的意思是>长期使用堆碎片整理?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    [引用 userid="387962" url="~/support/wireless-connection/bluetooth-group/蓝 牙/f/蓝 牙-forum/1074017/cc2642r-是否-the -iCall_malloc-here-hosal-hag-type-ha-he-memory-blage-blagse-issue-period-period-over the period-of the status/7396918]7396918,您可以在本声明中详细阐述这些考虑事项。  ”。 您的意思是>将堆碎片整理得更长一段时间?

    我们的开发人员了解碎片问题,并尝试在编码中将这些问题最小化。

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢克莱门特。 TI 开发人员提出的任何关于应用开发商如何也能最大程度地减少碎片问题的具体清单?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    克莱门特,您是否可以向我们提供有关将如何最小化堆中的碎片的参考?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    与所有嵌入式系统一样,动态分配会增加碎片风险。 我建议尽可能使用静态分配。

    我希望这将有所帮助,

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    克莱门特,您好!

    在与 Mehul 直接交谈时,我们希望您尽可能提供帮助,帮助您更清楚地了解 TI 的耐久性测试。

    首先,下面是 TI 和 Mehul/客户之间的最新问答:

    1. TI 开发商采取了哪些措施来最大限度地减少碎片问题? 分配恒定大小的内存是否始终能最大程度地减少碎片问题,以及 TI 开发商在 BLE 堆栈和 TI RTOS 中所做的工作?

    (a)堆栈的开发考虑到了合理的内存分配。  当然,根据客户具体实施应用程序的方式,如果所说的应用程序分配了大量内存(特别是不同大小的大内存分配),我们建议用户充分利用至少一些静态内存分配。  请记住,这不是一个全面修复,因为 BLE 堆栈的某些区域可能会继续使用动态分配。

    1. 运行耐力测试意味着什么? 应用固件的标准是什么?

    (A)根据客户通过 TI-RTOS 或 OSAL 堆管理器专门实施堆的方式,两者都有一些可以提取的诊断信息级别。  这些诊断程序[如 《BLE-5堆栈用户指南》的调试内存问题[software-dl.ti.com 中所述]非常有用,在测试不同的内存分配缓冲区大小和内存测试条件时,TI 开发人员也使用这些诊断程序。  然后,这些‘耐用性’或重复性测试将用于在这些内存分配的上下文中验证 BLE 堆栈本身的整体可靠性和运行情况。

     

    1. 即使建议应用程序开发人员不要使用堆内存来最小化堆碎片,TI RTOS 和 BLE 堆栈仍然使用堆内存,堆碎片问题也不会完全消除。 因此,无论应用程序是否使用堆,堆碎片的风险都将存在。 那么,为什么应用程序不能继续使用堆内存以及 TI 对 TI RTOS 和 BLE 堆栈遵循的相同标准? 或者,TI 对应用开发商的建议是完全不在应用中使用堆内存?

    (a)这可能更像是一个建筑问题。  如果用户知道需要大量内存分配,则可以根据需要分配内存,然后在应用程序中手动管理内存分配,或者只是静态分配。  老实说,由于 CC2642R 设备本身拥有相对较大的80KB RAM 占用空间,因此这可能不是一个整体问题。  此外,还应查看上述《BLE-5堆栈用户指南》中的“动态内存分配和堆配置”部分,以获得更多建议。  

     未决问题与以下内容相关: Mehul/客户将对应用程序中的堆内存的使用情况执行所需的分析。 [他们已经在使用“heapmgMemAlo”来跟踪堆的使用情况。]

     但请您详细说明上述耐力测试吗? TI 运行此测试的持续时间是多少,对于频繁执行使用堆的模块,建议使用其他特定方案或建议吗?

    谢谢你,
    克里斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    克莱门特,您好!

    我知道您之前曾分享过:"耐久性测试是我们测试设备是否长期保持稳定的测试(小时或天,具体取决于用例)。 根据客户所针对的用例,客户可能会运行类似的测试,这可能是有意义的。”

    我们非常感谢并欢迎根据最新线索提供的更多详细信息。

    谢谢你,
    克里斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Chris,

    关于 TI 在 BLE 堆栈上运行的耐久性测试。 这些测试的长度取决于使用案例。 如果没有 NDA,我们不会提供这些测试的详细信息。

    系统设计人员应评估最终产品所需的测试级别。 对于要运行的耐力测试的长度,没有通用答案。 它取决于目标应用程序的类型,用户的外部重置可能性,应用程序的重要性等  

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    克莱门特您好,

    我们理解并同意。  感谢您提供意见。  我还会直接与客户沟通,因为 Mehul 也在这条主线上。

    此致,

    克里斯