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.

[参考译文] CC3120:将主机驱动程序移植到 STM32

Guru**** 2540720 points
Other Parts Discussed in Thread: CC3100, CC3120

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/690115/cc3120-porting-host-driver-to-stm32

器件型号:CC3120
主题中讨论的其他器件:CC3100

您好!

我的目标是将 Simplelink 主机驱动程序移植到在单线程模式下不使用操作系统运行的 STM32环境。 我以前在 CC3100上有过很好的体验。 但是、我在这里为新的 SDK 感到很困难。

 根据我的知识和多个文档(SWRU455E -第16部分/ SimpleLink_Gen1_TO_Gen2_SDK_Migration_Guide.html)、我到目前为止已经管理了:
+以便在我的环境中成功集成和构建主机驱动程序
+在我的处理器和 CC3120之间获得正常工作的 SPI 通信
+启动 sl_Start 过程并接收启动的事件

为此、我省略了所有 与信号量相关 的函数(Semaphore_create_handle、 Semaphore_delete、...) 这总是返回成功;实际上、我认为与我的非操作系统实施无关。
但在快速测试之后、我注意到  一旦调用 sl_Start 函数、就会调用 Semaphore_functions!

与我在文档中看到的所有内容相反(请参阅 SWRU455E -第16.7部分"如果主机应用程序基于非操作系统环境、则不需要执行此步骤。")、 SL_SyncObj 和 SL_LockObj 对于主机驱动程序来说是必需的、即使在非操作系统、非多线程环境中也是如此。 我认为这有点胡说。

是否有任何方法可以获得有关此问题的支持? 或者、我是否在 SDK 配置中遗漏了一些内容?

PS:我已经浏览   了 simplelink_msp432p4_SDK 中包含的 SemaphoreP_nortos.c / MutexP_nortos.c 文件 、以查看信标/互斥量示例、但它们太多依赖于硬件、无法轻松移植。 这比我在阅读这些文档时所做的工作要多得多。

提前感谢、

Alain。

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

    尊敬的 Alain:

    CC3120主机驱动程序确实需要实现同步对象。 使用当前发布的代码示例、这些同步对象在驱动程序移植层(DPL)中实现。 但是、仍可以使用 CC3100 SDK 方法在主机驱动程序中实现同步对象。

    让我解释一下。 您已经注意到、在 CC3120 SDK 中、信号量/互斥/其他 RTOS 同步对象功能已移至 MSP432 SDK 中的 DPL。 其背后的想法是、除了开箱即用的 SDK 支持的 TIRTOS 和 FreeRTOS 之外、您还可以使用一个简单的抽象层来适应任何要使用的 RTOS。 由于每个 RTOS 都有自己的方式来处理同步对象、因此您可以使用特定于 RTOS 的 API 来实现 DPL 函数。 然后、所有 TI 提供的驱动程序和代码示例都可以使用同一组 API 进行同步、而不受 RTOS 环境的影响。

    现在、当在不同的 RTOS 环境之间进行移植时、这种方法很容易工作、这种环境通常提供所有所需同步对象的实现。 但是,在 noRTOS 环境中,您没有任何实施,并且必须了解如何使用设备的硬件来实现同步功能。 因此、对于 MSP432、noRTOS DPL 使用硬件计时器、硬件中断控制器等来正确实现 RTOS 在本地为您提供的所有功能。

    在上一代中、CC3100 SDK 采用了完全不同的方法来同步 noRTOS 环境的对象。 CC31xx 主机驱动程序始终需要实施同步对象,然后采用的方法是,如果未定义“sl_platform_multi_threaded”,则必须在内部实现所需的所有同步功能。 如果您查看 CC3100 SDK、特别是主机驱动程序的 nonos.c/.h、您可以看到驱动程序如何实现此功能。 这里的假设是、对于 noRTOS、不会在系统范围内实现同步对象。 其主要缺点是、如果 noRTOS 系统中已经有同步 API、则可能会有冗余代码、并且由于这些同步实现包含在主机驱动程序中、因此很难进行修改。

    关于 SWRU455e 第16.7节中的移植文档、CC3100主机驱动程序具有处理 noRTOS 所需的内置功能、因此无需实现这些对象的说法是正确的。 由于上述 DPL 相关性、对于当前发布的 CC3120主机驱动程序而言、这确实会产生误导。

    话虽如此、对于 CC3120主机驱动程序、您还可以使用 CC3100 SDK 方法来处理 noRTOS 中的同步对象。 在 user.h 中、不将所有 sl_SyncObj/sl_LockObj 对象定义为 DPL 实现的 SemaphoreP/MutexP 对象、而是将其重新定义为内部实现。 您可以使用 CC3100 SDK 的 nonos.c/.h 作为指导、了解如何执行此操作。 应该可以使用该方法完全避免将 DPL 移植到 STM32环境。

    如果您需要更多指导或有任何其他问题、请告诉我。

    此致、
    Michael

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

    您好、Michael、

    感谢您的详细回答! 这对我来说似乎更清楚。

    我将尝试执行您建议的操作。 我简要地查看了 CC3100 SDK 中的 nonos.c 文件、但我还没有看到这一点。
    无论如何、我将在第一种方法中移植 DPL。

    如果未来有关于移植的问题、我将打开此主题。

    此致、

    Alain。