Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

FreeRTOS应用编程

SMP FreeRTOS支持动态调度和确定性行为

XMOS为了支持xcore的编程模型,他们扩展了流行的免费实时操作系统FreeRTOS的内核,使其支持SMP,并将其上游到了亚马逊网络服务。

这使得内核的调度程序可以在xcore的任意数量的逻辑内核上启动,并在运行时动态地调度FreeRTOS线程,而不是在编译时静态地安排。

这种动态调度使得FreeRTOS能够在运行时更有效地使用物理内核。xcore架构提供了对确定性行为和时间的保证,FreeRTOS线程也可以从中受益。使用SMP FreeRTOS内核,开发人员可以轻松地创建具有确定性行为的多线程应用程序。SMP FreeRTOS内核还可以使用动态调度来优化资源利用率,从而提高系统性能。

AMP SMP FreeRTOS

为了进一步利用xcore硬件和FreeRTOS编程模型,XMOS提供了对每个tile的非对称多处理(AMP)的支持。每个XMOS芯片至少包含两个tile,它们由各自的逻辑xcore内核、IO、内存空间等组成。

XMOS提供了一种构建方法和各种软件驱动程序,允许创建一个应用程序,这是一个包含,多个SMP FreeRTOS内核的AMP系统。关于这种编程模型如何工作的更多信息可以在FreeRTOS入门中找到。

值得注意的是,AMP SMP FreeRTOS在AMP架构下运行,因此SMP FreeRTOS之间可能不完全对称,并且可能有不同的资源限制。

RTOS驱动

为了帮助简化SMP RTOS上的xcore应用的开发,XMOS提供了几个SMP RTOS兼容的驱动。这些驱动包括但不限于:

  • 通用I/O接口
    • GPIO
    • UART
    • I2C
    • I2S
    • PDM microphones
    • QSPI flash
    • SPI
    • USB
    • Clock control
  • xcore特性
    • 跨tile通道通信
    • 软件定义的内存 (仅限xcore.ai)
    • 软件定义的L2 Cache (仅限xcore.ai)
  • 其他
    • Silicon Labs WF200 series WiFi transceiver

这些驱动都可以在SDK的modules/rtos/modules/drivers路径下找到。

关于这些驱动的文档可以在SDK文档页面的RTOS驱动部分找到。

值得注意的是,这些驱动程序中的大多数都使用了轻量级的RTOS抽象层,这意味着它们不依赖于FreeRTOS。可以想象,只要提供一个抽象层,它们就可以在任何SMP RTOS上工作。这个抽象层可以在modules/rtos/modules/osal这个路径下找到(osal代表Operating System Abstraction Layer)。目前,唯一可用于xcore的SMP实时操作系统是XMOS SMP FreeRTOS,但在未来可能会有更多的可用系统。

软件服务

SDK还包括一些更高级别的RTOS兼容软件服务,其中一些服务会调用上述的驱动程序。这些驱动包括但不限于:

  • DHCP server
  • Dispatcher
  • FAT filesystem
  • HTTP parser
  • JSON parser
  • MQTT client
  • SNTP client
  • TLS (Thread Local Storage)
  • USB stack
  • WiFi connection manager

关于几个软件服务的文档可以在SDK文档页面的RTOS服务部分找到。

这些服务都可以在SDK的modules/rtos/modules/sw_services路径下找到。