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

Embedded 有RTOS和没有RTOS的嵌入式程序有什么区别,embedded,rtos,Embedded,Rtos,有人能给我解释一下有没有RTOS的嵌入式程序的区别吗。当我开始学习嵌入式时,我总是在没有任何操作系统的情况下编写代码,所有代码都分为子函数和主函数,子函数在主函数中调用,并且它仍然正确运行,为什么它仍然在没有操作系统的情况下运行?如果我在代码中添加RTO,会发生什么?感谢所有的答案,非常感谢你,你没有给出任何问题的背景,但是假设你正在尝试用一个开发环境来编程某种微控制器,允许你使用免费的RTO运行 在没有RTOS的情况下运行是您已经了解的简单情况-您的程序在主功能中启动,并运行您已编程的任何循环

有人能给我解释一下有没有RTOS的嵌入式程序的区别吗。当我开始学习嵌入式时,我总是在没有任何操作系统的情况下编写代码,所有代码都分为子函数和主函数,子函数在主函数中调用,并且它仍然正确运行,为什么它仍然在没有操作系统的情况下运行?如果我在代码中添加RTO,会发生什么?感谢所有的答案,非常感谢你,你没有给出任何问题的背景,但是假设你正在尝试用一个开发环境来编程某种微控制器,允许你使用免费的RTO运行

在没有RTOS的情况下运行是您已经了解的简单情况-您的程序在主功能中启动,并运行您已编程的任何循环或操作集

使用RTOS运行将添加一组.c文件,这些文件在很大程度上实现了调度器。然后,您需要在调度程序启动其主循环之前,将要定期运行的函数注册为调度程序中的任务。 因此,操作系统的实现将成为您项目的一部分,并与您的程序一起编译

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

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

我总是将代码[…]分为子函数和主函数,子函数在主函数中被调用,它仍然正确运行

你提到了答案的完美起点: 当您使用函数语法并在链接器工具中输入单独的翻译单元,将代码划分为单独的函数、模块或类(如果我们不考虑C和汇编语言)时,您可以使用RTO来划分CPU,就像您有多个CPU一样,软件可以运行,对你的软件应该实现的每一件事都使用不同的方法。 现在请用“运行任务周期”替换“完成任务”

<>注意,与函数/模块分离不同,例如,如果使用C或C++,则任务上下文分离在编程语言内部不被支持。 因此,您必须将这种分离与更多的手动工作结合起来

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

不要混淆RTOS和OS内核,如果你访问微软或GNU/Debian/FEDORA/SUSEFASE基金会(或苹果或谷歌或IBM……),并请求一个OS——它们会给你实际的OS内核,这些应用程序可能需要大量的应用程序来实现你的目标系统(PC/HANY)。 当我们讨论RTOS时,我们总是考虑RTOS内核。 当谈到操作系统时,我们指的是内核(除非我们将pars pro toto的使用想象成Windows、Linux等“操作系统”,这在这种情况下不会经常发生)。 (RT)操作系统的内核是组织何时运行任务以及何时暂停任务的组件

如果我在代码中添加RTO,会发生什么

起初,什么都没有: 您可以将RTOS配置应用于单个任务,并将主循环软件的当前实现填充到该单个任务中。 这应该可以不受限制地工作(如果您将并行性用于将程序构造为函数-主函数已经是第一个函数…)

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

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

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

如何或在何处运行代码?“将RTO添加到我的代码中”是什么意思?这是个不错的问题。RTOS与平台无关,因此与使用什么平台无关。RTOS可以集成到任何代码中,因此所讨论的代码不相关。唯一相关的是为什么RTOS是有用的看看:从你的上下文来看,RTOS指的是多任务操作系统,不一定是实时操作系统,对吗?想象一下,一些酒馆里有很多客户和店主,他们接受订单,准备订单,为他们服务,为他们付钱,然后清理所有的桌子,等等,试试同一家酒馆,里面有一个专职厨师、几个服务员、一个收银员和一个服务员,所有人都在一起工作。您认为哪种情况更有效?这是对RTO行为的一种有点过于简单的解释。当然,实时任务通常不会“定期”运行,而是响应外部事件。在没有RTOS的情况下可以实现简单的周期性执行,RTOS添加的是基于优先级的抢占式调度、线程同步、资源锁定和进程间通信机制,这些机制在正确使用时可以确定地保证对实时任务的反应时间