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.

[参考译文] CC1352R:如何正常关闭 BLE。

Guru**** 2557520 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/957494/cc1352r-how-to-gracefully-shutdown-ble

器件型号:CC1352R

在我们的应用中、我希望关闭 BLE、并且只有15.4 subghz 处于活动状态。

关闭 BLE 的命令实际上来自活动的 BLE 连接。

我使用 DMMPolicy_updateStackState()更新到 BLE 堆栈暂停的状态。 这似乎可以在早期使用、但在 SDK 4.30中、它为我提供了断言错误。

发出 assert 的函数是 线程类型置为有效的 Clock_instance_finalate()。

void Clock_instance_finalize (Clock_Object * obj)
{
UINT 键;

assert_isTrue (((BIOS_getThreadType ()!= BIOS_ThreadType_Hwi)&&
(BIOS_getThreadType ()!= BIOS_ThreadType_Swi))、
Clock_a_badThreadType);

KEY = Hwi_disable();

queue_remove (&obj->elem);

Hwi_restore (key);
} 

现在我的问题是:

  1. 在此过程中、禁用 BLE 并终止连接的官方方法是什么?
  2. 是否有任何关于导致这一断言的建议?
  3. 在新的 SDK4.30中、这一角度是否有任何变化?

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

    您好、Marjin、

    我想您 的 DMMPolicy_updateStackState()在这种情况下调用 BLE 端的"暂停的 CB",这是正确的吗? 在这种情况下、您在该回调中执行什么操作?

    在 BLE 终端方面、我将要求其他人对此发表评论、但总的大纲是:

    *终止连接

    *确保未打开广播

    这应将 BLE 置于休眠状态(初始化后无法将其完全关闭)。

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

    您好、M-W、

    正确、我创建了一个具有 BLE 暂停的 DMM 策略、这会从默认的 REMOVE_DISPLAY.c 调用暂停 CB

    这确实会执行您提到的操作、GAP 高级禁用和 GAP 终止链接

    案例 RD_policy_pause_EVT:
    {
    uint8_t numActive = linkDB_NumActive();
    uint16_t pause =*((uint16_t*)(pMsg->pData);
    
    if (PAUSE =DMMPOLICY_PAUSED)
    {
    if (numActive < MAX_NUM_BLE_CONNS)
    {
    //停止广播
    GapAdv_disable (advHandleLegacy);
    }
    
    //停止终止启动广播
    dmmPolicyBlePaused = true;
    
    //终止所有连接
    GAP_TerminateLinkReq (LINKDB_CONNNANDLE_ALL、HCI_DISCONNING_REMOTE_USER_TERM);
    }
    其他
    {
    /*从暂停状态恢复时,我们不应该有活动的连接,而应该只是这样
    *以防在开始广播之前检查最大连接数
    *
    if (numActive < MAX_NUM_BLE_CONNS)
    {
    GapAdv_enable (advHandleLegacy、GAP_ADV_ENABLE_OPTIONS_USE_MAX,0);
    }
    
    dmmPolicyBlePaused = false;
    }
    
    中断;
    }
    

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

    尊敬的 M:

    这似乎是正确的。  在时钟断言中、您能否共享调用堆栈、以便我更好地了解谁可能尝试关闭时钟句柄(您提到的"更新状态"应该可以告诉您。

    从4.30的角度来看、在尝试执行您想要执行的操作时、行为应该没有差别。

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

    您好!

    请参阅下面的调用堆栈。 它似乎来自 TI-RTOS (位于闪存中)。

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

     Clock_instance_finalize 函数对象具有以下数据。

    next 和 prev 指向:

    下一步:在 RF_object 数据中

    上一个:oadActivityClk

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

    您好、Marijn、

    是否可以尝试打开运行时对象查看器以检查谁在应用程序中拥有该时钟对象? 或者、如果您可以分享该项目、并说明您如何重新生产(IDF)、我可以自行检查。

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

    您好!

    运行时查看器大部分时间在此处不起作用。

    它出错了、我多次尝试使用这里的论坛让它正常工作、有时它可以正常工作、但更经常地不工作。

    我将在内部检查我是否可以在 PM 中与您共享项目。

    ALS 我将尝试在干净的 DMM 示例上复制它

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

    它提醒我最近的另一个问题。 您是否可能从 ROM 运行 TI-RTOS 和/或在 FH 模式下使用 TI 15.4?

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

    您好、M-W、

    感谢您的回复。

    我们在闪存中运行 TI-RTOS、我们的网络操作模式为信标模式

    此致、

    Marijn

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

    您好、Marijn、

    如果无法共享项目、您是否可以共享您看到的 ROV 错误?

    您还可以尝试通过定义 XDC_runtime _ assert_disable_all 来禁用断言。 这将使"闪存版本"更接近 ROM 版本。 我知道、在一些情况下、堆栈不遵循严格的 TI-RTOS "断言规则"、但这些情况已经过验证。 遗憾的是、有时在闪存中使用 TI-RTOS 时、这些情况仍然会导致断言。  

    话虽如此、我仍想验证谁"拥有"您项目中的相关时钟对象。  

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

    请找到 ROV 查看器随附的屏幕截图

    今天、我将尝试您关于断言禁用的建议。

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

    您从旧版 SDK 进行了迁移、对吗? 这是一个旧的 BLE 项目问题、其中 ROV 缺少存储器符号、但几个 SDK 之前应该已经解决了该问题(我认为这是.cfg 或.cmd 级别的修复)。 如果您从较旧的 SDK 迁移、则可能尚未获得修复、因此错误。  

    如果您可以分享有关此问题的更多详细信息、我可以看到我是否可以再次为您挖掘修复程序(如果尚未到位)。  

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

    您好、M-W、

    是的、实际上我从 SDK3.40升级到了 SDK4.30。

    该项目基于 DMM_154sensor_remote_display_oad 应用程序、我集成了本机 OAD (超过15.4)、因为当时不支持该操作(仍然不支持)。

    您需要哪些详细信息?

    此致、

    Marijn

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

    您好、Marjin、

    检查您的项目中是否存在针对 ROV 的 BLE 调试指南中建议的变通办法(SDK 3.20):

    https://dev.ti.com/tirex/explore/node?a=pTTHBmu__3.20.00.68&node=AORHSvJNCJkn6rS93wDgGg__pTTHBmu__3.20.00.68&r=pTTHBmu__3.40.00.02

    它位于"TI-RTOS 对象查看器-> ROV 权变措施"下

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

    好的、谢谢。 我用静态堆构建它、现在 ROV 是可以的。

    我将重现崩溃问题并向您发送 ROV 数据

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

    您好、M-W、

    请查看以下任务和时钟的屏幕截图。

    您是否需要额外的 ROV 数据?

    仅关闭网关(器件进入孤立模式)也会出现同样的问题、因此本身不与 BLE 相关

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

    您好、Marijin、

    则可能与 TI-15.4端的另一个"错误"类似。 时钟对象的地址是否自线程开始以来发生了变化(我假设它确实发生了变化、因为存储器配置可能已经移位了一位)? 您能否再次检查时钟对象的地址、因为它可以帮助我们缩小确切的位置。

    至于解决方法、我建议您现在就关闭这些断言、直到现在、因为从功能角度来看、这应该是可以的。  

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

    您好、M-W、  

    是的、地址确实发生了变化。 可能是由于使用固定堆重建。 请参阅下图中的调用栈

    好的、如果它进一步运行正常、我将禁用断言检查。

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

    好的、那么现在这个断言已经超出了应用程序正常工作的方式。

    但是、当我从网关断开器件连接时、我看到 BLE 再次联机、但仅需几秒钟。 然后、它会关断并一直保持关闭状态、直到我复位器件。 那么、我的问题还会进一步探讨如何以正确的方式重新启用 BLE?

    在运行时的某个位置、我能看到当前 DMM 堆栈状态是什么吗?

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

    好的、我自己解决了 BLE 使能问题。

    显然、15.4堆栈在 从网关断开连接后调用 syncLoss 回调(macSyncLossCb)。

    不知道为什么会这样做、因为器件会获得断开指示并向网关确认、因此它应该知道不再有任何信标需要跟随。

    但是在这个 syncLoss 回调中、我放置了一个 DMMPolicy_updateStackState、以确保将优先级设置为15.4并保持/暂停 BLE。

    因此、我断开连接后、BLE 会重新启用、但几秒钟后、syncLoss 回调会再次将其关闭。

    如果 我配置了网络、我只通过调用 DMMPolicy_updateStackState 来解决该问题、但我认为15.4堆栈在确认取消关联后不应调用 syncLoss 回调。

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

    您好、Marijn、

    感谢您的分享。 很高兴知道您最终找到了一个有效的解决方案 至于 macSyncLossCb 行为、我在内部给它一个旋转、以确定它是否为预期行为。  

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

    您好、M-W、

    您是否有关于取消连接过程的此意外行为的更新?

    谢谢、

    Marijn

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

    您好、Marijn、

    恐怕我还在等待有关该主题的反馈。 我将在收到有关此内容的更新后立即通知您!