有RTOS和没有RTOS的嵌入式程序有什么区别

时间:2019-06-14 06:22:09

标签: embedded rtos

任何人都可以向我解释带有和不带有RTOS的嵌入式程序有何区别。当我开始学习嵌入式程序时,我总是在没有任何操作系统的情况下编写代码,所有代码都分成子功能和主功能,子功能在主功能中被称为并且仍然可以正常运行,为什么它仍在没有操作系统的情况下运行?如果我将RTOS添加到代码中,会发生什么?感谢所有答案,非常感谢

3 个答案:

答案 0 :(得分:1)

您没有提供任何有关此问题的信息,但是假设您正在尝试使用允许您使用免费RTOS 运行的开发环境对某种微控制器进行编程。 >

在没有RTOS的情况下运行 是您已经了解的简单情况-您的程序从main函数开始,并运行您已编程的任何循环或一组操作。

在RTOS上运行 会添加一组.c文件,这些文件在大多数情况下实现了调度程序。然后,您需要在调度程序开始其主循环之前将要定期运行的功能注册为调度程序中的任务。 因此,操作系统的实现将成为您项目的一部分,并与您的程序一起进行编译。

总而言之,如果您决定需要运行多个任务,并且调度程序将使您的系统受益,则可以添加RTOS,而不必自己实现循环背后的逻辑。

答案 1 :(得分:0)

您似乎对从基本的“超级循环”(又称“前台背景”或“ main + ISR”)架构过渡到RTOS感兴趣。

为此,我建议在YouTube上观看以下视频课程:

前景/背景架构: https://youtu.be/AoLLKbvEY8Q

RTOS第1部分:多个超级循环和手动上下文切换 https://youtu.be/TEq3-p0GWGI

RTOS第2部分:自动化上下文切换 https://youtu.be/PKml9ki3178

RTOS第3部分:调度(循环) https://youtu.be/PX_LDyiXs5Y

RTOS第4部分:有效阻止 https://youtu.be/JurV5BgjQ50

RTOS第5部分:实时调度(基于优先级) https://youtu.be/kLxxXNCrY60

RTOS第6部分:与信号量同步 https://youtu.be/IrDcBZX0AdY

RTOS第7部分:互斥 https://youtu.be/kcpVI3IjUUM

答案 2 :(得分:0)

有和没有RTOS的嵌入式程序之间有什么区别 [...]

我总是写成分在子函数和主函数中的代码,子函数在主函数中被称为并且仍然可以正确运行

您提到了答案的完美起点: 通过使用函数语法并将单独的翻译单元输入到链接器工具中,将代码划分为单独的函数,模块或类(如果我们想到的不是C语言和汇编语言),则可以使用RTOS来对软件运行的 CPU 进行分区,就像您有多个CPU一样,为软件应实现的每一项功能使用不同的CPU。 现在,请用“运行任务周期”代替“完成任务”。

请注意,与功能/模块分隔不同,例如,如果使用C或C ++,则编程语言内部不支持任务上下文分隔。 因此,您将不得不将此分离与更多的手动工作结合起来。

为什么在没有操作系统的情况下仍然可以运行?

如果您访问Microsoft或GNU / Debian / Fedora / SuSE基金会(或Apple或Google或IBM或...)并要求使用OS,请不要将RTOS / OS内核与所获得的东西混淆。 ll为您提供具有大量应用程序的实际OS内核,这对于完全在目标系统(PC / handy)中进行有效利用可能是非常必要的。

在谈论RTOS时,我们总是考虑使用RTOS内核。 在谈论OS时,我们指的是内核(除非我们认为 pars prototo 用法与Windows,Linux等“ OS”一起使用,在SO上很少发生)。 (RT)OS的内核是组织何时运行任务以及何时暂停任务的组件。

如果我将RTOS添加到代码中,会发生什么?

起初,什么都没有: 您可以将RTOS配置与一个任务一起应用,然后将主循环软件的当前实现方式填充到该单例任务中。 这应该不受限制地工作(如果您采用并行性将程序结构化为功能-主要功能已经是第一个功能...)。

但是,现在您可以从软件的分解(架构)开始,一个接一个地添加任务,并通过小界面来连接其他任务。 RTOS库将通过为您提供进程间通信元素(事件/队列/邮箱)来实现这些接口。

在理想的基于RTOS的体系结构中,每个任务均应从邮箱(或事件或队列等)接收其工作包作为项目。 每当任务没有其他项目(消息,事件,队列数据等)时,RTOS内核就会阻止该任务并切换到另一个已准备就绪的任务>执行。 这样,只有有工作要做的任务才会真正消耗CPU时间。

如果有多个准备执行的任务,则下一步运行哪个任务的选择取决于调度算法,在配置RTOS库时必须选择该算法。 通常,典型的嵌入式系统中的任务会分配不同的 priority ,这样,只有在没有更高优先级的 ready 任务时,任务才会占用CPU。 因此,RTOS为您提供了一个完美的解决方案,以实现既可以执行紧急任务也可以执行非紧急任务的系统。例如,有和没有实时要求的任务。