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.

[参考译文] SIMPLELINK-CC13X2-26X2-SDK:SDK_5_20_00_52存储器溢出

Guru**** 3003130 points

Other Parts Discussed in Thread: SIMPLELINK-CC13XX-CC26XX-SDK, Z-STACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1059908/simplelink-cc13x2-26x2-sdk-sdk_5_20_00_52-memory-overflow

器件型号:SIMPLELINK-CC13X2-26X2-SDK
主题中讨论的其他器件:SIMPLELINK-CC13XX-CC26XX-SDK、 Z-STACK

在我使用正式演示:zr_light 并配置 Touchlink->target(BDB_TL_target)后,它出现内存泄漏。

ZR 器件加入集中式网络后、协调器继续断电3分钟、然后通电30秒。 经过一段时间(1小时)后、ZR 器件的内存已满。

uint32_t tmpArr[10]={0};
OsalPort_heapMgrGetMetrics (&tmpArr[0]、&tmpArr[1]、&tmpArr[2]、&tmpArr[3]、&tmpArr[4]、&tmpArr[5]);


当 ZR 设备首次进入网络时:  bmax=110、cnt=100、f=18、a=2368、mMax=3332、u=3564
一小时后:  Bmax=168、Cnt=159、F=30、A=5188、MMax=5812、U=6140

存储器已满后、器件无法正常运行。
但是,如果 ZR 项目未配置 Touchlink->target(BDB_TL_target),则不会出现此类问题。

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

    我发现、如果协调器继续运行 Mgmt_permit_join_req、ZR 器件将泄漏内存...

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

    已找到问题的原因:

    当执行 TOUCHLINK 任务(touchLinkTarget_EVENT_LOOP)时、会判断 task_id。 此操作本身没有问题、但当 stackTaskFxn 调用此任务时、task_id 会写入0。  


    此问题更为严重、它存在于 SDK 的4_40和5_20版本中。

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

    您好 Mingwei、

    感谢您提醒我此问题、它看起来类似于 https://e2e.ti.com/f/1/t/1053970中的观察结果、 因此我正在与软件开发团队合作、以查找根本问题并推荐解决方案或解决方法。

    此致、
    Ryan

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

    我已修复问题并正常测试。

    我在4_40版的 SDK 中没有发现此问题、因为最大内存使用情况不同。

    sdk4_40: Bmax=926、  Cnt=917、  F=28、  A=44636、  MMax=45040、   U=45456
    sdk5_20: Bmax=168、  Cnt=159、  F=30、  A=5188、   MMax=5812、    U=6140

    我想知道如何调整堆存储器的最大峰值、谢谢~

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

    由于具有不同 RAM 大小的 SimpleLink 器件产品系列不断扩展、堆大小不再是动态分配的。  因此、可以在 app.cfg 中更改 HEAPMGR_SIZE 变量、 Z-Stack 用户指南中对此进行了进一步说明。  但是、这只会进一步延迟因内存泄漏而导致器件故障所需的时间。  您是否实施了任何其他 项目修改来解决 SIMPLELINK-CC13X2-CC26X2-SDK v5.20的问题?

    此致、
    Ryan

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

    您好 Mingwei、

    要关闭此功能、导致此问题的根本原因是 TL 指示器/目标器件的任务 ID 未用于对 OSAL 消息进行去队列处理。 每次触发类型为 zdoIncomingMsg_t 的 ZDO 消息回调时、这会导致60字节的泄漏。  下面是对 Z-Stack 的正式更改 、一旦 SIMPLELINK-CC13XX-CC26XX-SDK v5.40发布、这些更改将应用于 SIMPLELINK-CC13XX-CC26XX-SDK v5.40。

    从 bdb_touchlink_initiator.c:

    uint32_t touchLinkInitiator_event_loop( uint8_t task_id, uint32_t events )
    {
      if(events & SYS_EVENT_MSG)
      {
        OsalPort_EventHdr *pMsg;
        ZStatus_t stat = ZFailure;
    
        //if((pMsg = (OsalPort_EventHdr *)OsalPort_msgReceive(task_id)) != NULL)  //LINE REMOVED
        (void)task_id;  // Intentionally unreferenced parameter  //LINE ADDED
    
        if((pMsg = (OsalPort_EventHdr *)OsalPort_msgReceive(touchLinkInitiator_TaskID)) != NULL) //LINE ADDED
        {
          switch(pMsg->event)
    //...

    从 bdb_touchlink_target.c:

    uint32_t touchLinkTarget_event_loop( uint8_t task_id, uint32_t events )
    {
    
      (void)task_id;  // Intentionally unreferenced parameter  //LINE ADDED
    
      if ( events & SYS_EVENT_MSG )
      {
        OsalPort_EventHdr *pMsg;
    
        if ( (pMsg = (OsalPort_EventHdr *)OsalPort_msgReceive( task_id )) != NULL )  //LINE REMOVED
        if ( (pMsg = (OsalPort_EventHdr *)OsalPort_msgReceive( touchLinkTarget_TaskID )) != NULL )  //LINE ADDED

    此致、
    Ryan

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

    您好、Ryan、

    您能否详细说明故意未引用参数的用途?  我们为什么需要它?

    (void) task_id; //有意 添加了未引用的参数//行

    谢谢。

    此致、

    水阳

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

    您好、Shuyang、

     除了 内部静态分析检查外、没有必要这样做。  其他 Z-Stack 任务循环函数具有类似的未使用参数、否则没有任何功能或用途。

    此致、
    Ryan

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

    感谢您的澄清。

    BR、

    水阳

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

    在 CC2652的 ZStack 中、每个"EVENT_LOOP"中的 task_id 无效。