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.

[参考译文] CC2652R: iCall_heapGetStats () 的 totalFreeSize 提供了非常大的数字

Guru**** 2688855 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1595909/cc2652r-totalfreesize-of-icall_heapgetstats-goes-extremely-large-number

器件型号: CC2652R
主题: SysConfig 中讨论的其他器件

尊敬的 TI 专家:

我使用ICall_heapGetStats()来监控堆使用情况、发现stats->totalFreeSize现场偶尔会出现非常大的峰值。 一旦发生这种情况、即使系统继续运行而没有任何可见问题、该值也永远不会恢复正常。 以下是我观察到的值:

正常情况

Total: 23592, TotalFree: 13028, largestFree: 9680

异常情况

Total: 23592, TotalFree: 1794978708, largestFree: 9680

MCU: CC2652
SDK: 8.30.0.121.

我的应用程序使用ICall_malloc()ICall_free()、并基于论坛中的一些解释、这些 API 是线程安全的。

我的问题是:在何种情况下可能会 totalFreeSize损坏或返回这样的异常值?

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

    您好、

    感谢您联系我们。 通常、当意外看到如此大的值导致存储器损坏时。 如果发生了不正确的存储器分配/释放、或者直接与存储器交互不当、就会发生这种情况。

    此致、

    1 月

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

    您好、Jan、

    在我的项目中、我使用ICall_heapMalloc()ICall_heapRealloc()ICall_heapFree()作为 iCall 级别的 API、在仔细检查代码后、我确认每个mallocrealloc调用都有相应的free

    Project define 如下所示、SysConfig Heapps 配置为 HeapCallback、我注意到他们的低级实现在中rtos_heaposal.h

    现在、只有totalFreeSize字段不正确。 有趣的是 最后两个字节 仍然似乎反映了正确的值、并totalFreeSize会随着内存分配而动态变化。 我应该如何解释这种行为?  

    您能否提供一些可能损坏堆结构的滥用情形示例?  

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

    您好、

    明白。 感谢您提供更多详细信息。 您的项目基于哪个示例项目?

    此致、

    1 月

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

    您好、  

    我们的系统使用 BLE5Stack 多角色示例作为中央设备的基础、并使用 simple_peripheral 示例作为外设的基础。

    我们在这两个基础上都添加了自己的应用层。 中央器件将 GATT 数据读取和写入外设、将接收到的数据存储在堆存储器中、将其转发到云、然后释放分配的存储器。

    但是、我们遇到的问题发生在中心侧。

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

    您好、

    明白。 作为快速测试、您能否尝试使用 OSAL 堆全局变量来查看它们是否也能看到这些值?

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_8_31_00_11/docs/ble5stack/ble_user_guide/html/ble-stack-5.x-guide/debugging-index.html#debugging-common-heap-issues

    您可以在调试时将这些变量添加到表达式中、以查看它们的值是否有效。

    此致、

    1 月

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

    谢谢 Jan、问题已解决。