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.

[参考译文] CC2640R2F:我的应用程序卡在 HAL_ASSERT_SPINLOCK 默认情况下

Guru**** 2540720 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/966736/cc2640r2f-my-application-is-getting-stuck-at-hal_assert_spinlock-default-case

器件型号:CC2640R2F

大家好、

我使用的是来自 blestack (4.2)的多角色示例和 CCS 9.3.0的 SDK4_20_00_04、

我的应用程序会扫描一段时间、然后广播一段时间、并且在扫描可连接的设备时、在两次传输数据之间也会继续保持相同的状态。

它可以正常工作几个小时,但不会出现问题,稍后它在主 HAL_ASSERT_SPINLOCK 的默认情况下卡住。

我检查了堆,检查了 ROV 所有内容是否仍然限制了导致这个问题的原因,我无法理解

我要附加调试控制台的图像、其中包括当我暂停时的 HEAPMGR 值 ROV 和堆栈调用、以供您参考。

如果有人能帮助我了解原因!

此致、

阿图尔

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

    嗨、Rohit、

    很抱歉、我们都是从假期回来的。

    您能总结一下所做的应用程序级别更改吗? 更具体地说、器件在哪个间隔进行扫描/广播? 您是否做了任何事情来使问题更具重现性?

    如果您可以提供重现问题的步骤、这将有所帮助、尽管我知道有些问题确实是间歇性的、很难重现。

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

    尊敬的 Ammar:

    感谢您的回复!!!

    //扫描参数
    #define DEFAULT_SCAN_DURATION 130 //4000
    #define DEFAULT_SCAN_WINE 208
    #define DEFAULT_SCAN_INT 208

    扫描每1200毫秒进行一次、每1.2秒扫描130毫秒、其余时间将关闭。

    当扫描打开时,设备将不会广播,因此我有两个不同的广播和扫描插槽,将持续15秒  

    持续处于扫描模式、每1200毫秒扫描一次130毫秒、直到15秒、将进行扫描、然后再进行扫描  

    在接下来的15秒内、它将在广播模式下持续15秒、广播间隔为100毫秒。

    因此、当器件处于扫描状态时、它将扫描可用器件并连接到具有特定名称的器件、并发送所有数据以及器件处于中时

    广播模式其他2640R2F 将连接到该广播设备并发送数据。 并且会随着时间的推移重复发送相同的数据。

    经过几个小时的连续操作后、它进入旋转锁。

    除此之外、它没有其他功能。   

    此致、

    阿图尔

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

    您好、Atul、

    我们可以通过一些方法来缩小问题的范围。 您是在定制硬件上还是在 LaunchPad 上进行测试、我建议先在 LaunchPad 上进行测试。

    我将遵循以下几个调试步骤:

    • 尝试查看提高扫描/广播速率的影响(即每隔5秒切换一次)。 如果是与内存相关的问题、器件应更快进入旋转锁、从而更容易重现。

    [引用 user="Rohit Karekar"]连接到具有特定名称的设备,并发送所有数据以及设备处于状态

    • 是否 在连接到另一台设备时才出现此问题? 尝试删除此步骤并严格扫描/广播以查看是否在没有连接的情况下发生锁定。

    此外、您能否提供显示如何启用/禁用扫描/广播的应用程序代码?

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

    '我使用的是来自 blestack (4.2)和 CCS 9.3.0的多角色示例的 SDK4_20_00_04、[/quot]根据 Debug 视图中的回溯、问题是 multi_role_processStackMsg ()函数收到 了 HCI_BLE_hardware_error_sdk_ram_event_event_event2 (尽管在 ctrack_ram_event_event_event_ram_event_event_event_event_event_event2中看起来不匹 配)。

    您可以通过在 "Debug"视图的回扫中选择 multi_role_processStackMsg 行来进行验证、并查看以下内容是否正确:

    案例 HCI_BLE_hardware_error_event_code:
    AssertHandler (HAL_assert_cause_hardware_error、0);
    中断;
    

    如果是、请参阅 解码硬件错误原因 、了解如何获取有关原因的更多信息。

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

    尊敬的 Ammar:

    我们可以通过一些方法来缩小问题的范围。 您是在定制硬件上还是在 LaunchPad 上进行测试、我建议先在 LaunchPad 上进行测试。

    • 是的,我正在自定义硬件上进行测试,好的,我将在 launchpad 上再次检查相同的硬件。

    尝试查看提高扫描/广播速率的影响(即每隔5秒切换一次)。 如果是与内存相关的问题、器件应更快进入旋转锁、从而更容易重现。

    • 是的、我已通过禁用连接开始测试、并将扫描/广播窗口缩短为5秒、我将很快更新结果。

        此外、您能否提供显示如何启用/禁用扫描/广播的应用程序代码?

    • 以下是供您参考的代码:

    用于维护扫描/广播开关窗口的代码:(计时器以1秒的周期运行)

    if (f5_seconds_wait=0)

        five_seconds_wait_count++;
        if (f5_seconds_wait_count>=5)
       {
           five_seconds_wait_count=0;
           five_seconds_wait=1;
           if (device_connected = 0)
          {
            turn on advt ();
          }
       }

    if (f5_seconds_wait=1)

        five_seconds_wait_count1++;
        if (f5_seconds_wait_count1>=5)
        {
          five_seconds_wait_count1=0;
          five_seconds_wait=0;
             if (device_connected = 0)
             turn off advt ();
         }

    开始扫描的代码:每秒扫描打开时都会调用此代码

         uint8_t i;

    对于(i=0 <DEFAULT_MAX_SCAN_RES;i++)

         devList[i].addrType=0;
         devList[i].eventType=0;
         memset (devList[i]。addr、0、gateway_data);

    //开始或停止发现
    if (linkDB_NumActive()< maxNumBleConns)//我们可以连接到另一个器件

       if ((!scanningStarted)&&(ten_seconds_wait=0))//如果我们尚未扫描 connecting_state
       {
          scanningStarted = true;
          scanRes = 0;
          GAPRole_StartDiscovery (default_discovery_mode、default_discovery_active_scan、default_discovery_white_list);
       }
      else //取消扫描
      {
         GAPRole_CancelDiscovery();
         scanningStarted = false;
      }

    我们停止扫描的代码:

      案例 GAP_DEVICE_DISCOVERING_EVENT:

          scanningStarted = false;

    中断;

    void turn on advt ()

        uint8初始化地址使能= true;
        GAPRole_SetParameter (GAPROLE_Adverte_enabled、sizeof (uint8_t)、
            初始化地址启用(&A)、空);

    void turn off advt ()

        uint8初始化地址使能= false;
        GAPRole_SetParameter (GAPROLE_Adverte_enabled、sizeof (uint8_t)、
           初始化地址启用(&A)、空);

    此致、

    阿图尔

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

    切斯特·吉隆、您好!

    好的、我将在您提到的情况下验证我这次添加了断点、我将在重现问题后更新结果。  

    此致、

    阿图尔

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

    感谢您的反馈。 我将由团队在内部执行此操作、同时等待您的结果。

    编辑:如果您尚未了解我们的 Simplelink Academy 模块、我强烈建议您访问 :https://dev.ti.com/tirex/explore/content/simplelink_academy_cc2640r2sdk_4_30_01_00/modules/blestack/ble_scan_adv_basic/ble_scan_adv_basic.html#advertising-task-3-ndash-change-advertising-interval-at-runtime 

    如果您可以遵循这种方法并等待 GAPROLE_WAITing、然后再禁用广播、这可能会确保您在尝试停止广播时不会主动进行广播。

    请注意:我将在下周的周一至2021年4月1日离开办公室。 我的回复将延迟到我返回为止。

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

    尊敬的 Ammar:

    我已将扫描/广播更改了5秒、并禁用了连接部分、现在只有设备我扫描5秒、然后根据您的输入广播接下来的5秒、

    在这种情况下、我一直在对器件进行调试以进行隔夜测试、但器件仍在正常工作、同样、我将继续进行同样的操作以检查任何其他问题、

    但是、以前、当我的扫描/广播在启用连接的情况下保持15秒时、它将进入自旋锁模式。

    如果没有连接、它直到现在还没有进入自旋锁、即使在5秒扫描/广播时也是如此。

    如果您可以遵循这种方法并等待 GAPROLE_WAITing、然后再禁用广播、这可能会确保您在尝试停止广播时不会主动进行广播。

    • 如果我停止广播、它 将进入 GAPROLE_WAITING_RUSTING_RUSTING_RUSTABLE 状态吗? 我没有得到这一点。

    此致、

    阿图尔

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

    尊敬的 Ammar:

    在所有情况下、相同的设置只会禁用连接、仅每5秒广播/扫描一次、但器件仍在从12月31日开始运行、目前没有任何问题。

    此致、

    阿图尔

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

    您好、Atul、

    感谢您的反馈。 这很好。 从这里、您是否能够更频繁地连接到设备并捕获监听器的无线流量日志?

    如果您的连接/断开频率比默认方法更频繁、这可能有助于更快地重现问题。

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

    尊敬的 Ammar N:

    我无法获取监听器日志,但在启用连接时重现了相同的问题,

    如果可以通过任何方式帮助解决问题、我可以为 Callstacks 获取 ROV 捕获  

      

    如需更多信息、请告知我。

    此致、

    阿图尔

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

    您好、Atul、

    感谢您提供这些信息。 如果没有监听器日志、很难说出无线传输的内容来确定原因。 接下来、我建议您浏览 我们的调试器指南 、并尝试此处概述的步骤和方法。 具体而言、 HAL 断言原因和说明 部分。 尝试弄清断言的原因是什么、应将其传入。 我相信另一位社区成员也提到了这一点。