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:BLE 扫描在收到一些广播后崩溃

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1345710/cc2652r-ble-scanning-crashes-after-receiving-some-advertisements

器件型号:CC2652R

void KB_App_enableScan (){
INT 状态;
uint8_t temp8;
uint16_t temp16;


//注册回调以处理扫描器事件
状态= GapScan_registerCb (KB_GAP_ScanCallback、NULL);

//设置扫描器事件掩码
状态= GapScan_setEventMask (GAP_EVT_SCAN_ENABLED | GAP_EVT_SCAN_DISABLED |
GAP_EVT_ADV_REPORT);

//设置扫描 PHY 参数
STATUS = GapScan_setPhyParams (DEFAULT_SCAN_PHY、DEFAULT_SCAN_TYPE、
DEFAULT_SCAN_INTERVAL、DEFAULT_SCAN_WINDOW);

//设置广告报告字段以保留
温度16 = ADV_RPT_Fields;
状态= GapScan_setParam (SCAN_PARAM_RPT_Fields、&temp16);
//设置扫描主 PHY
temp 8 = DEFAULT_SCAN_PHY;
状态= GapScan_setParam (SCAN_PARAM_PRIM_PHY、&temp8);
//设置 LL 重复过滤器
temp 8 = scanner_dopus_filter;
状态= GapScan_setParam (SCAN_PARAM_FLT_DUP、&temp8);

//设置 PDU 类型过滤器-
//只需要"可连接"和"完整"数据包。
//如果接收到的数据包是
//无论是可扫描还是不可扫描,无论是定向还是非定向,
//是 Scan_Rsp 还是广告,还是传统或扩展。
temp 16 = SCAN_FLT_PDU_NONCONNECTABLE_ONLY | SCAN_FLT_PDU_EXTEND_ONLY | SCAN_FLT_PDU_COMPLETE_ONLY;
Status = GapScan_setParam (SCAN_PARAM_FLT_PDU_TYPE、&temp16);
Status = GapScan_enable (_KB_GAP_PERIOD、DEFAULT_SCAN_DURATION、0);

这是我的 GAP 扫描使能模式、我使用观测器+外设模式  
在接收到70条广告后扫描广告时,我的代码崩溃
e2e.ti.com/.../kb_5F00_app.c
上面是存在扫描的完整代码

上图是观测器配置、我可以知道在接收了大约70个扫描数据后代码崩溃的确切原因
此外、我还将释放接收和发送

编辑:
我尝试了多角色示例使 Pheripheral 和 obeserver ,但它只接收205个广告,并且没有崩溃代码仍然 Gapscan 启用事件正在调用,但它没有收到任何 Adv 报告

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

    您好!

    感谢您与我们联系。

    我正在考虑内存泄漏问题、因为您提到了在修复大量报告后重现该问题。 为了查看这个理论、我想让您检查一下 调试指南中所述的堆使用情况

    此外,您能否提供在 KB_GAP_ScanCallback ()中执行的代码以及它最终触发的代码?

    我希望这将有所帮助、

    此致、

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

    我在上面添加了文件的 kb_app.c 中的完整代码

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

    您好!

    感谢您告诉我-我首先错过了随附的文件。

    根据我对代码的评论、似乎没有释放广播报告有效负载数据-可以解释观察到的问题。

    为了释放广播报告有效负载数据、我建议在"_KB_ADV_REPORT_EVT"条件下添加下面的代码(未修改的 simple_central 示例为"SC_EVT_ADV_REPORT"):

          // Free report payload data
          if (pAdvRpt->pData != NULL)
          {
            ICall_free(pAdvRpt->pData);
          }
          break;

    我希望这将有所帮助、

    此致、

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

    解决了问题,我可以知道简单的方法来学习调试,因为我是一个新开发的人,很难在上面给出的调试文档中找到它

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

    您好!

    很高兴听到问题得到解决!

    我提供的调试指南介绍了可能的主要方法。 个人而言、我非常喜欢该 ROV 以及 CCS 提供的所有调试可能性。

    此外、请访问 TI 开发人员专区 https://dev.ti.com/

    此致、