为什么我会考虑将RTOS用于我的嵌入式项目?

spa*_*e78 29 embedded rtos firmware

首先是我的问题的背景,具体细节如下:

我在平台上工作的公司目前是使用MPLAB IDE作为开发环境的Microchip PIC32系列.此前,我们还为同一应用编写了Microchip dsPIC和TI MSP系列的固件.固件非常简单,因为代码分为三个主要模块:设备控制,数据采样和用户通信(通常是用户PC).器件控制是通过GPIO总线和至少一部分需要SPI或I2C控制的部分组合实现的.使用定时器模块中断数据采样以保持采样频率,使用更多SPI/I2C和GPIO总线来控制采样硬件(即ADC).用户通信目前通过USB使用Microchip App Framework实现.


那么现在的问题是:鉴于我上面所描述的内容,我会考虑在什么时候为我的项目使用RTOS?目前我正在考虑将这些可能的触发点作为使用RTOS的理由:

  • 代码复杂性? 代码库架构/组织仍然足够小,我可以保留所有细节.
  • 多任务/多线程? 通过中断对模块执行进行时间分片就足以实现多任务处理.
  • 测试? 目前,我们没有通过硬件烟雾测试进行太多正式测试或验证(我希望在不久的将来能够纠正).
  • 通讯? 我们目前使用自定义数据包格式和协议,该协议几乎只执行START,STOP,SEND DATA命令,数据是二进制blob.
  • 项目范围? 在不久的将来,我们有可能获得一个项目,将我们的设备集成到一个更大的系统中,目标是将该系统用于大规模生产.目前我们所有的项目都是实验原型,快速周转约一个月,一次生产一个或两个单位.

您认为我应该考虑哪些其他方面?根据您的经验,您认为(或强迫)您考虑使用RTOS而不是仅仅在基本运行时运行代码?关于为RTOS设计/编程的其他资源的指针也非常受欢迎.

Dan*_*Dan 33

您可能希望使用RTOS的原因有很多.它们的多样性以及它们适用于您的情况的程度很难说.(注意:我倾向于这样思考:RTOS 意味着硬实时,这意味着抢占内核...)

  • 速率单调分析(RMA) - 如果您想使用速率单调分析来确保您的时间期限得到满足,您必须使用先发制人的调度程序

  • 通过基于优先级的抢先RTOS,即使不使用RMA,也可以满足实时截止日期,您的调度程序可以帮助确保满足最后期限.矛盾的是,RTOS通常会增加中断延迟,因为内核中的关键部分通常会屏蔽中断

  • 管理复杂性 - 当然,RTOS(或大多数OS风格)可以帮助解决这个问题.通过允许将项目分解为独立的线程或进程,并使用OS服务(如消息队列,互斥,信号量,事件标志等)进行通信和同步,您的项目(根据我的经验和意见)变得更易于管理.我倾向于从事大型项目,大多数人都了解保护共享资源的概念,所以很多新手的错误都不会发生.但要注意,一旦你采用多线程方法,在你解决问题之前,事情会变得更加复杂.

  • 使用第三方软件包 - 许多RTOS提供其他软件组件,例如协议栈,文件系统,设备驱动程序,GUI软件包,引导加载程序和其他中间件,它们可以帮助您更快地构建应用程序,而不仅仅是"集成器".一个DIY商店.

  • 测试 - 是的,当然,您可以将每个控制线程视为具有定义良好的接口的可测试组件,尤其是在使用一致方法时(例如始终在消息队列中的单个位置阻塞).当然,这不能替代单元,集成,系统等测试.

  • 稳健性/容错性 - RTOS也可以为处理器的MMU提供支持(在您的PIC情况下,我认为不适用).这允许每个线程(或进程)在其自己的受保护空间中运行; 线程/进程不能"浸入"彼此的内存并踩踏它.甚至设备区域(MMIO)也可能不受某些(或所有)线程的限制.严格地说,您不需要RTOS来利用处理器的MMU(或MPU),但是2可以很好地协同工作.

通常,当我可以使用RTOS(或某种类型的抢占式多任务程序)进行开发时,结果往往更清晰,更模块化,更良好,更易于维护.当我有选择时,我会使用一个.

请注意,多线程开发有一点学习曲线.如果你是新来的RTOS /多线程开发,你可能有兴趣在一些文章选择一个RTOS,抢占的危险,并以抢占式多任务的介绍.

最后,即使您没有提出建议......除了众多商业RTOS之外,还有免费产品(FreeRTOS是最受欢迎的产品之一),而Quantum平台是一个基于事件驱动的框架.包含抢占式内核的活动对象的概念.有很多选择,但我发现拥有源代码(即使RTOS不是免费的)也是有利的,尤其是.调试时

  • 我正在考虑输入不必要的答案+1.我只是添加一个指向http://www.micrium.com/的指针,它是uC/OS-II的主页.它是商业开源,也是可以在同一站点找到的RTOS设计教科书的主题.我推荐这本书作为对内核的原因,原因和方法的一个很好的概述. (3认同)
  • 即使是最小的RTOS(uC/OS-II和FreeRTOS跳出来)也会帮助你避免重新发明诸如信号量,队列,事件标志等轮子,这些轮子很难完全正确并且如果没有完全实现则很难调试问题对. (2认同)

小智 6

RTOS首先允许您将并行流组织到一组任务中,并在它们之间进行明确定义的同步.

IMO,非RTOS设计仅适用于单流架构,其中所有程序都是一个无限循环.如果您需要多流程 - 许多任务,并行运行 - 您最好使用RTOS.如果没有RTOS,您将被迫在内部实施此功能,重新发明轮子.