将外围驱动程序与RTOS接口



在我的一个项目中,控制器的选择是STM32L1系列。ST为USB、I2C、SPI等提供驱动程序。因此,在决定RTOS时,是否需要考虑驱动程序。或者,在决定RTOS后,有没有任何标准的方式将微控制器的外围驱动器与RTOS接口?

否,微控制器外围驱动程序和RTOS通常是独立的,因此不需要考虑兼容性。微控制器外围驱动程序是不依赖于任何RTOS服务的基本驱动程序。事实上,外围库可以在没有任何RTOS的情况下使用。RTOS通常不依赖于定时器之外的任何微控制器外围设备。甚至定时器的设置也不是RTOS内置的。定时器通常由用户代码在启动RTOS之前设置。

如果我还没有说服你,而你仍然想要一些兼容性的保证,那么探索CMSIS。

虽然ST的低级别驱动程序没有RTOS依赖项或要求,但您可以使用RTOS机制围绕这些驱动程序构建更高级别的驱动程序架构,以支持互斥、缓冲和管理器处理程序优先级。

例如,您可以通过设备管理器线程或通过互斥来管理对设备的多线程访问。

没有标准定义的方式将外围驱动程序连接到RTOS,因为它取决于RTOS。然而,一种常见的方法是利用RTOS提供的阻塞互斥或信号量。阻塞互斥体意味着,如果互斥体不可用,任务将等待直到空闲,并且在此之前不使用任何CPU时间。

通常,在运行RTOS时,您希望外围驱动程序使用中断尽快获取输入数据,然后将数据传递给RTOS任务,该任务可能需要处理数据。这是一种管理外围中断和RTOS多任务处理的干净方法。

一般情况下,您有一个任务在等待互斥对象。大多数情况下,它不需要任何CPU时间。当外围驱动程序被中断调用时,驱动程序会从硬件上获取数据,并释放互斥对象,这样等待的任务就会唤醒。实际数据可以使用全局变量或其他RTOS定义的机制在外围驱动程序和任务之间传递。类似的机制可以使用信号量来实现。

ST提供的外围驱动器(无论是StdPeripheralLib、HAL还是LL)都可以在该型号中运行。因此,在决定使用哪个RTOS时,您应该考虑使用支持此模型的API RTOS。

相关内容

  • 没有找到相关文章

最新更新