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路径下找到。