0

我正在尝试将 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 实例表示它已初始化。有没有办法设置加入者回调超时?我查看了文档,但找不到连接超时是如何设置的。

谢谢

4

1 回答 1

0

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

加入 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 信号量上的未配对锁定/解锁,或者应用程序任务可能正忙于等待。

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

于 2020-04-29T01:37:30.457 回答