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.

[参考译文] RTOS/CC3220:器件启动期间暂停执行

Guru**** 2577385 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/756015/rtos-cc3220-pause-execution-during-device-startup

器件型号:CC3220

工具/软件:TI-RTOS

团队、

在我的应用中、首先创建 SL_Task、然后创建配置线程(类似于配置示例)、然后创建其他应用线程、如 SNTP、OTA、MQTT 等

在 sl_Task (器件启动)完成之前、我会遇到应用程序线程启动的间歇性问题。 让几秒钟的睡眠似乎解决了这个问题、但我认为这不是一个好的解决方案。 通过检查设备状态,是否有任何方法可以暂停序列? 如果是,是否有人可以共享代码片段?

我的 SDK 版本为2.20.00.10

此致、

Zac

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

    您能更详细地描述一下您间歇性地看到的故障类型、以及您认为发生故障的原因吗?

    sl_Task 线程应在其他线程之前创建(并准备好运行)、但其他线程在执行任何操作之前无需等待。 您似乎已经这样做了、因此我认为有关该问题的更多详细信息将帮助我们指导您如何解决该问题。

    如果遇到 sl_Task 被其他线程阻止并且阻止网络处理器启动运行正常返回的问题、我建议提高 sl_Task 的优先级或确保阻止所有其他线程调用 SimpleLink 主机驱动程序 API、直到 sl_Start 返回。 这可以通过手动跟踪通用控制块中的器件状态(已启动/未启动)或使用信标同步(和阻止)线程来实现、直到启动操作完成。

    最棒的
    本·M
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ben、
    我发现很难在我的 LaunchPad 上重现此问题。 根据我的记忆、问题是在 sl_Task 线程完成之前调用 SimpleLink 主机驱动程序 AP (在我的应用程序线程中)。 我的 SL_Task 线程的优先级为9、其他线程的值小于0、因此线程分块可能不是原因。我可能需要跟踪我的器件状态、如果已启动、则应继续创建其他线程。 您是否会告诉我跟踪设备已启动状态的正确命令?

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

    好的、感谢您对它进行更详细的描述。 此问题有多种可能的解决方案。

    对于简单的演示、您可以轻松地遵循我们的 out_for_box 应用程序的方法。 它生成 sl_Task 线程,然后在生成其余线程之前对 sl_Start()进行阻塞调用。 另一个选项是阻止信号量上的其余线程,直到 sl_Start()调用在另一个线程中成功。

    对于更完整的应用、我建议使用全局状态变量来跟踪状态。 当 sl_Start()在该线程中成功返回时,应在变量中设置一个位,以指示网络处理器已启动,并且可以进行其他 API 调用。 每当调用 sl_Stop()时,就可以清除该位。 然后、您可以在调用 SimpleLink 的应用程序其余部分中的任何代码段之前检查该位。 从技术上讲、有一个名为 g_SlDeviceStatus 的全局变量作为主机驱动程序的一部分存在、用于跟踪器件状态、但您应该创建自己的状态变量、应用程序线程可以访问该变量来检查状态。

    一般而言、实现由您决定、以及如何决定在应用程序的不同部分保持状态/您希望如何执行错误处理。

    最棒的
    本·M
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ben、
    在创建 sl_Task 线程后调用 sl_Start (0、0、0)、抛出错误 sl_Start 失败。 我能否多次调用 sl_Start()。 我相信它是在另一个线程中调用的。

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

    如果在器件已经启动后调用 sl_Start(),则会返回错误。 为了避免冲突、请尝试跟踪器件何时使用状态变量启动、并且在置位时不要再次调用它。

    最棒的
    本·M