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.

LAUNCHXL-CC26X2R1: 死机问题定位

Part Number: LAUNCHXL-CC26X2R1

开发板运行一段时间后死机,如何定位死机原因?

  • 您好,

    死机的原因可能是多方面的,软件硬件都有可能,

    您能否描述一下是在何种情况下碰到的这种情况,硬件方面是launchpad还是您客制化的板子?软件方面是在跑什么程序,有使用到相关的一些SDK吗?

    感谢您的支持,期待您的回复。

  • 硬件:官方开发板LAUNCHXL-CC26X2R1

    工程:multi_role_CC26X2R1_LAUNCHXL_tirtos7_ticlang

    修改项:

    一、修改角色为Observer,在case GAP_DEVICE_INIT_DONE_EVENT事件完成后打开 GapScan_enable(0, 0, 30);持续扫描,并在MR_EVT_ADV_REPORT事件中打印扫描到的MAC和RSSI,运行3分钟后出现卡住,类似死机现象。(去掉扫描结果打印后,在定时器(3S)中加打印字符串,但是在后续挂机中定时器中打印也出现死机现象只不过运行90分钟才出现。,怀疑是UART打印速率过高导致死机?) 

    二、去除了官方打印和界面,自己添加打印,修改代码如下,Printf为向外部task调用打印接口(单Task调用)

    创建一个Uart任务

    Uart初始化

    任务实体

    给外部提供的打印接口

  • 您好,

    您可以尝试把您的工程打包直接发文件压缩包过来,我们可以实际上手测试查找相关问题。

    感谢您的支持。

  • 您好,

    感谢您的快速跟进,我们这边会进行测试,有结论及时联系您。

  • 您好!

    麻烦问下这个问题有进展了吗?

  • 您好!

    麻烦问下这个问题有进展了吗?

  • 您好,

    您的问题已经同步给产线工程师,他们给反馈后会即使答复您

  • map文件可以定位问题,那么死机后可以用该文件获取dump文件吗?或者说死机后无法查看堆栈

  • 您好,

    收到工程师的回复:

    根据您的描述,应用似乎不需要使用多角色项目(multirole project)。如果正在实施观察员角色(observer role),那么我们会建议从 simple_central 开始并根据需要修改项目。

    您能否尝试对 simple_central 项目执行更改并验证该现象是否仍然存在?

    另外,7.10 SDK 已经发布了一段时间,我们会建议您始终使用最新的 SDK,以确保得到最新的错误修复、功能和优化。

  • 我可以尝试其他工程或SDK,

    问题:CC26x2芯片死机时是否支持查看其堆栈(死机信息)?如果可以麻烦同步下方法,谢谢!

  • 更换了别的任务,依旧打印一段时间死机

    我想长期扫描    函数 GapScan_enable(0, 0,0)应该在哪里调用?

  • 您好,

    收到工程师的和回复:

    首先,为什么您要扫描这么长时间?保持在扫描模式会消耗大量电量。

    也许更推荐做一些周期扫描来避免这个问题。

    还要确保调用函数以在正确的位置进行扫描(检查它在simple_central中调用的位置),因为如果不分配内存,它可能会遇到“内存不足”问题。

    要真正了解崩溃的来源, 请用sniffer记录一些BLE痕迹( BLE traces)。

  • 如图高亮部分,buf为Static时不死机,去掉static时死机,当为局部buf时减小size为32时也不会死机,是不是芯片堆栈管理的问题?

    case MR_EVT_ADV_REPORT:
    {
    GapScan_Evt_AdvRpt_t* pAdvRpt = (GapScan_Evt_AdvRpt_t*) (pMsg->pData);

    static int8_t buf[128] = {0};
    memset(buf, 0, sizeof(buf));
    snprintf(buf, sizeof(buf), "MAC: %s, RSSI: %d\r\n", Util_convertBdAddr2Str(pAdvRpt->addr), pAdvRpt->rssi);
    DoPrint(gPrintHand, "Discovered: %s", buf);
    if (pAdvRpt->pData != NULL)
    {
       ICall_free(pAdvRpt->pData);
    }
        break;
    }

  • 您好,

    我们工程师认为可能和持续扫描(continuous scanning)有关。工程师还是希望您可以尝试抓取BLE Trance。

    可能和扫描方式不当也有关系。如果扫描不正确,设备可能会耗尽内存导致崩溃。