有人能解释一下带RTOS和不带RTOS的嵌入式程序有什么区别吗?我学习嵌入式时,总是编写没有任何操作系统的代码,所有代码都分为子函数和主函数,子函数在主函数内调用,它仍然可以运行正确。为什么不需要操作系统就能运行呢?如果我将RTOS添加到我的代码中,会发生什么?感谢您的回答。
有人能解释一下带RTOS和不带RTOS的嵌入式程序有什么区别吗?我学习嵌入式时,总是编写没有任何操作系统的代码,所有代码都分为子函数和主函数,子函数在主函数内调用,它仍然可以运行正确。为什么不需要操作系统就能运行呢?如果我将RTOS添加到我的代码中,会发生什么?感谢您的回答。
无RTOS的运行是您已经理解的简单情况 - 您的程序从主函数开始运行,执行您编程的任何循环或一组动作。
运行带RTOS会添加一组 .c 文件,主要实现调度程序。在它开始其主循环之前,您需要将想要定期运行的功能注册为调度程序的任务。因此,操作系统的实现将成为您项目的一部分,并与您的程序一起编译。
总之,如果您已经决定需要运行多个任务,并且调度程序将有益于您的系统,则可以添加RTOS而不是自己实现循环逻辑。
不要将RTOS / OS内核与访问Microsoft或GNU / Debian / Fedora / SuSE基金会(或Apple或Google或IBM等)并要求操作系统时得到的内容混淆 - 他们会提供实际的操作系统内核和大量应用程序,这些应用程序可能非常必要,以便在目标系统(PC / 手机)上进行有效利用。
谈到RTOS时,我们总是考虑RTOS内核。 谈到操作系统时,我们指的是内核(除非我们像“Windows,Linux”等“操作系统”一样使用“pars pro toto”用法,在SO上不会经常发生)。 (RT)OS的内核是组织何时运行任务和何时暂停任务的组件。
如果我将RTOS添加到我的代码中,会发生什么?
起初,什么都不会发生: 您可以应用一个具有单个任务的RTOS配置,并将当前主循环软件的实现塞入该单例任务中。 这应该可以无限制地工作(如果您将并行性应用于结构化程序以形成函数 - 主函数已经是第一个函数...)。
现在,您可以从软件的分解(架构)开始,逐步添加任务,并与其他任务使用小接口。
RTOS库将通过提供进程间通信元素(事件/队列/邮箱)来实现这些接口。
在理想的基于RTOS的体系结构中,每个任务都应该作为一个邮箱项(或事件,或队列等)接收其工作数据包。 当这个任务没有其他数据项(消息、事件、队列数据等)时,RTOS内核将会阻塞该任务,并切换到另一个准备执行的任务。 因此,只有需要执行的任务才会真正消耗CPU时间。
如果有多个准备执行的任务,则下一个要运行的任务取决于您在配置RTOS库时选择的调度算法。 通常,在典型的嵌入式系统中,不同的任务被赋予不同的优先级,以便当没有更高优先级的准备就绪的任务时,任务才会占用CPU。 因此,RTOS为您提供了完美的解决方案,可以实现具有和不具有实时要求的紧急和非紧急任务,例如。