OpenThread otJoinerStart 从不超时

OpenThread otJoinerStart Never Times Out

我正在尝试将 OpenThread child 与 TI CC2652R1 上的现有应用程序集成,但在尝试 join/create 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 似乎永远无法解决,因为从未调用连接器回调,并且对我的连接函数的其他调用显示连接器状态为 OT_JOINER_STATE_DISCOVER 并且 OpenThread 实例表示它已初始化。有没有办法设置加入者回调超时?我查看了文档,但找不到如何设置加入超时。

谢谢

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

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

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

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

我立即没有发现发布的代码片段有任何问题。