在MCU上使用实时操作系统而不是while循环的原因/好处

时间:2018-05-22 02:01:19

标签: operating-system controls real-time microcontroller robotics

我正在使用轮式机器人平台。我的团队正在MCU上实现一些算法

  1. 继续获取传感器读数(声纳阵列,红外阵列,电机编码器,IMU)
  2. 接收用户命令(通过连接到平板电脑的串口)
  3. 控制执行器(电机)执行用户命令。
  4. 继续向平板电脑发送传感器读数以获得更复杂的算法。
  5. 我们目前在全局while循环中实现所有内容,而我知道大多数其他用例与实时操作系统完全相同。

    请告诉我使用实时操作系统而不是简单的while循环的好处和原因。

    感谢。

5 个答案:

答案 0 :(得分:1)

RTOS将提供基于优先级的抢占。如果你的代码没有解析一个串行命令并执行它,它就不会响应其他任何东西,直到它返回到你的野兽循环。 RTOS将基于中断事件提供即时上下文切换所需的抽象。否则,事件响应的最坏情况延迟将是主循环中最长可能的偏移,有时您确实需要长时间运行的进程。例如,更新LCD面板或响应USB设备枚举。由于知道运行在CPU时钟的16位定时器在完成之前不会翻转几次,因此抢占允许您安全地执行这些操作。虽然对于简单的控制作业而言循环就足够了,但问题是,当你进入像USB设备枚举这样的东西时,它已经不再实用,需要完全重写。通过像RTOS提供的抢先式框架开始,您将拥有更多未来的灵活性。但是,肯定会有更多的前期工作,绝对是学习曲线。

答案 1 :(得分:0)

"实时"操作系统可确保您的任务周期。如果您想要每100毫秒精确读取传感器数据,简单的while循环将无法保证。另一方面,RTOS可以轻松解决这个问题。 RTOS为您提供可预测性。操作将在给定时间执行,不会错过。

RTOS为您提供信号量/互斥量,以便您的内存不会被破坏或多个源无法访问缓冲区。

RTOS提供了消息队列,可用于任务之间的通信。

是的,您可以在While循环中实现所有这些功能,但这样做的好处就是!你可以准备好所有的东西并进行测试。

答案 2 :(得分:0)

如果你的while循环工作(即它满足你系统的实时要求),并且它的健壮性,可维护性和可扩展性,那么使用实时操作系统可能没有任何好处。

但是如果你的while循环不能满足实时要求或过于复杂或过度扩展(即任何变化需要进一步调整和调整以恢复实时性能),那么你应该考虑另一种架构

RTOS架构是超级循环之外的一个流行的下一步。 RTOS基本上是用于管理软件复杂性的工具。它允许您将一组复杂的软件需求划分为多个执行线程。如果操作正确,每个单独的线程都有一组相对简单的需求,并且更容易实现。并且线程优先级化可以更容易地满足应用程序的实时要求。这些基本上都是使用RTOS的好处。

然而,RTOS并不是灵丹妙药。 RTOS会增加整体系统的复杂性,并使您了解新类型的错误(例如死锁)。它需要知识和经验来有效地设计和实现基于RTOS的程序。考虑诸如Multi-Rate Main Loop Tasking之类的替代方案或基于事件的状态机架构(例如QP)。这些替代方案可能更简单,更易于理解,或者与您的软件设计方式更加兼容。

答案 3 :(得分:0)

RTOS多任务有一个很大的优势:

非常好的I / O性能:一旦它请求的I / O操作完成,RTOS就可以设置等待线程就绪,因此处理读/写/任何可能的低延迟。循环的轮询设计无法响应I / O完成,直到它检查I / O状态(直接或我轮询由中断处理程序设置的一些易失性标志)。

独立功能:如其他答案所示,为串行通信,执行器等实现隔离子系统的简易性很可能适合您。知道任何额外的延迟,例如某些串行交换,不会对其他地方的时间产生不利影响,这是非常让人放心的。你需要等一下?没问题:睡觉(1000)你已经完成了 - 对其他子系统没有影响:)这是'不,我不能添加网络服务器,它会改变所有的时间,我将不得不重新测试一切'和“当然,有足够的CPU可用,我已经有了另一个工作的代码,我只需要另一个线程来运行它。”

还有其它优点可以帮助抵消因必须使用其关键部分,信号量和条件编程抢先式多任务程序而增加的烦恼。 显然,如果你的硬件有多个内核,RTOS会有所帮助 - 它可以像任何其他资源一样分享可用的CPU执行周期,而添加内核则意味着更多的周期。

但最终,I / O性能和功能隔离是最大的胜利。

其他答案中的一些建议可能有助于代替RTOS或与RTOS一起使用。控制多个I / O硬件时,例如。传感器和执行器,事件驱动的状态机确实是一个非常好的主意。我经常通过将所有事件排队到一个线程(生产者 - 消费者队列)来实现它,该线程只能访问状态数据并实现状态机,因此序列化操作。

优点是否值得用蜡烛在你和你的要求之间:)

答案 4 :(得分:0)

RTOS不是while循环 - 而是循环+工具来组织你的任务。他们如何组织你的任务?为他们分配优先级,决定每个人有多少工作时间和/或应该在什么时间开始/结束。 RTOS还可以对您的软件进行分层,即harwdare相关的东西,应用程序任务等。除此之外,它还为您提供数据结构,容器,随时可用的界面来处理常见任务,因此您无需实现自己的内容即为您分配一些内存,锁定某些资源的访问权限等。