【问题标题】:OpenThread otJoinerStart Never Times OutOpenThread otJoinerStart 永不超时
【发布时间】:2020-04-29 09:37:30
【问题描述】:

我正在尝试将 OpenThread 子级与 TI CC2652R1 上的现有应用程序集成,但在尝试加入/创建 Thread 网络时遇到问题。目前我有一个外部事件,它调用一个函数来加入和启动 OpenThread。以下是与连接相关的此函数的片段:

    bool is_commissioned = otDatasetIsCommissioned(OtStack_instance);
    otJoinerState joiner_state = otJoinerGetState(OtStack_instance);
    if(!is_commissioned && (OT_JOINER_STATE_IDLE == joiner_state)){
        otError error = otIp6SetEnabled(OtStack_instance, true);
        error = otThreadSetEnabled(OtStack_instance, true);
        error = otJoinerStart(OtStack_instance, "PSK", NULL, "Company", "Device", "0.0.0", NULL, joiner_callback, NULL);
    }

otJoinerStart 似乎永远不会解决,因为从未调用 joiner 回调,并且对我的加入函数的其他调用显示 joiner 状态为 OT_JOINER_STATE_DISCOVER 并且 OpenThread 实例表示它已初始化。有没有办法设置加入者回调超时?我查看了文档,但找不到加入超时的设置方式。

谢谢

【问题讨论】:

    标签: openthread


    【解决方案1】:

    将 Thread 设备加入 Thread 网络假设您有一个 Thread 网络正在运行,并且有一个具有加入者的 EUI64 和 PSK 的活动专员。在尝试调用此函数加入之前,请确保这些已设置。在 Thread 网络的通道上运行嗅探器也很有帮助,以确保专员或加入者路由器正确响应。

    在线程中加入是通过对 IEEE 802.15.4 第 0 页中的所有可用通道进行主动扫描来完成的。发送加入请求的时间和加入者在每个通道上等待的时间不能立即配置。然而,这些主动扫描通常会在几秒钟内完成。如果在大约 5 秒内没有可用的加入者路由器,您的加入者回调应该会在加入失败的情况下被调用。

    OpenThread github 存储库中的示例以 nortos 方式编写。任何应用程序代码都在 tasklet 中运行,主循环只调用两个函数;处理小任务和处理驱动程序。在 TI SDK 中,我们使用 TI-RTOS,您的代码似乎基于这些示例。通常 OtStack_Task 将处理 OpenThread 和平台驱动接口的处理;但是在多线程系统中可能会发生死锁。

    您可以在 CCS 或 IAR 中使用 ROV 来检查内核和 RTOS 对象的状态。在具有活动调试会话的 CCS 中,选择; Tools >> Runtime Object View。然后检查堆栈任务是否在 API 信号量上阻塞。或者,如果应用程序任务占用了处理器。这可能是由于 API 信号量上的未配对锁定/解锁,或者应用程序任务可能正忙于等待。

    我立即没有发现发布的代码 sn-p 有任何问题。

    【讨论】:

    • 感谢您澄清 TI-RTOS 示例。我不知道对 OpenThread API 的每次调用都需要在应用程序代码端锁定/解锁
    猜你喜欢
    • 2011-07-26
    • 2017-01-21
    • 1970-01-01
    • 2019-02-25
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2011-05-25
    相关资源
    最近更新 更多