带RTOS和不带RTOS的嵌入式程序有什么区别
What is the difference between an embedded program with RTOS and without RTOS
任何人都可以向我解释带和不带 RT 的嵌入式程序有什么区别OS。因为我刚开始学嵌入式的时候,我写的代码总是没有任何OS,所有的代码都分为子函数和主函数,子函数在主函数中调用,它仍然运行正确,为什么没有 OS 还是 运行?如果我将 RTOS 添加到我的代码中,会发生什么?感谢所有答案,非常感谢
你没有给出问题的任何上下文,但假设你正在尝试使用允许你 运行 和 [=18= 的开发环境来编写某种 micro-controller ]免费转发OS.
运行 without RTOS 是您已经理解的简单情况 - 您的程序从 main 函数开始,运行s 随便什么您编写的循环或动作集。
运行 with RTOS 将添加一组 .c 文件,其中大部分实现调度程序。然后,您需要在调度程序开始其主循环之前将您想要 运行 定期注册为任务的功能。
因此 OS 的实现将成为您项目的一部分,并与您的程序一起编译。
总而言之,如果您决定需要 运行 多个任务,并且调度程序会对您的系统有益,您可以添加 RTOS 而不是在你自己的。
what is the difference between an embedded program with and without RTOS
[...]
I always write code [...] separated in to sub function and main function, sub function is called inside main function and it still run correctly
您提到了完美的答案起点:
当您将 代码 划分为单独的函数、模块或 类(如果我们考虑超越 C 和汇编程序等语言)时,通过使用函数语法并将单独的翻译单元输入链接器工具,您可以使用 RTOS 对 CPU 软件 运行 进行分区,就像您有多个 CPU 一样,为您的软件应实现的每一件事使用不同的一个。
现在请用“运行 任务周期”替换“完成事情”。
请注意,与 function/module 分离不同,如果您使用的是 C 或 C++,则您的编程语言内部不支持任务上下文分离。
因此,您必须将这种分离与更多的手动工作结合起来。
why does it still run without OS?
不要将 RTOS/OS 内核与访问 Microsoft 或 GNU/Debian/Fedora/SuSE 基金会(或 Apple 或 Google 或 IBM 或...)时获得的内核混淆并询问对于 OS - 他们会给你实际的 OS 内核,里面有很多很多的应用程序,这些应用程序对于你的目标系统 (PC/handy) 的生产使用来说可能是非常必要的.
在谈论RTOS时,我们总是考虑RTOS内核。
当谈论 OS 时,我们指的是内核(除非我们认为 pars pro toto 用法与“OSes” 类似 Windows, Linux 等,这在 SO 上不会经常发生)。
(RT)OS 的内核是组织何时 运行 任务以及何时暂停任务的组件。
And if I add RTOS to my code, what would happen?
起初,什么都没有:
您可以将 RTOS 配置应用于一个任务,并将主循环软件的当前实现填充到该单例任务中。
这应该可以不受限制地工作(如果您采用并行性将程序结构化为函数 - 主函数已经是第一个函数...)。
但现在您可以从软件的分解(体系结构)开始,一个接一个地添加任务,使用与其他任务的小接口。
RTOS 库将通过为您提供进程间通信元素 (events/queues/mailboxes) 来实现这些接口。
在理想的基于 RTOS 的体系结构中,每个任务都应从邮箱(或事件或队列等)中接收其工作数据包作为项目。
每当该任务没有其他项目(消息、事件、队列数据等)时,RTOS 内核将阻止 该任务并切换到另一个任务准备执行。
这样,只有有工作要做的任务才会实际消耗 CPU 时间。
如果有多个任务准备执行,那么运行下一个任务的选择取决于调度算法,你必须[=60] =] 在配置 RTOS 库时。
通常,典型的嵌入式系统中的任务被分配了不同的优先级,因此如果没有ready[=39=,任务只会占用CPU ] 优先级更高的任务。
因此,RTOS 为您提供了一个完美的解决方案来实现一个同时执行紧急和非紧急任务的系统,例如。例如,有和没有实时要求的任务。
任何人都可以向我解释带和不带 RT 的嵌入式程序有什么区别OS。因为我刚开始学嵌入式的时候,我写的代码总是没有任何OS,所有的代码都分为子函数和主函数,子函数在主函数中调用,它仍然运行正确,为什么没有 OS 还是 运行?如果我将 RTOS 添加到我的代码中,会发生什么?感谢所有答案,非常感谢
你没有给出问题的任何上下文,但假设你正在尝试使用允许你 运行 和 [=18= 的开发环境来编写某种 micro-controller ]免费转发OS.
运行 without RTOS 是您已经理解的简单情况 - 您的程序从 main 函数开始,运行s 随便什么您编写的循环或动作集。
运行 with RTOS 将添加一组 .c 文件,其中大部分实现调度程序。然后,您需要在调度程序开始其主循环之前将您想要 运行 定期注册为任务的功能。 因此 OS 的实现将成为您项目的一部分,并与您的程序一起编译。
总而言之,如果您决定需要 运行 多个任务,并且调度程序会对您的系统有益,您可以添加 RTOS 而不是在你自己的。
what is the difference between an embedded program with and without RTOS [...]
I always write code [...] separated in to sub function and main function, sub function is called inside main function and it still run correctly
您提到了完美的答案起点: 当您将 代码 划分为单独的函数、模块或 类(如果我们考虑超越 C 和汇编程序等语言)时,通过使用函数语法并将单独的翻译单元输入链接器工具,您可以使用 RTOS 对 CPU 软件 运行 进行分区,就像您有多个 CPU 一样,为您的软件应实现的每一件事使用不同的一个。 现在请用“运行 任务周期”替换“完成事情”。
请注意,与 function/module 分离不同,如果您使用的是 C 或 C++,则您的编程语言内部不支持任务上下文分离。 因此,您必须将这种分离与更多的手动工作结合起来。
why does it still run without OS?
不要将 RTOS/OS 内核与访问 Microsoft 或 GNU/Debian/Fedora/SuSE 基金会(或 Apple 或 Google 或 IBM 或...)时获得的内核混淆并询问对于 OS - 他们会给你实际的 OS 内核,里面有很多很多的应用程序,这些应用程序对于你的目标系统 (PC/handy) 的生产使用来说可能是非常必要的.
在谈论RTOS时,我们总是考虑RTOS内核。 当谈论 OS 时,我们指的是内核(除非我们认为 pars pro toto 用法与“OSes” 类似 Windows, Linux 等,这在 SO 上不会经常发生)。 (RT)OS 的内核是组织何时 运行 任务以及何时暂停任务的组件。
And if I add RTOS to my code, what would happen?
起初,什么都没有: 您可以将 RTOS 配置应用于一个任务,并将主循环软件的当前实现填充到该单例任务中。 这应该可以不受限制地工作(如果您采用并行性将程序结构化为函数 - 主函数已经是第一个函数...)。
但现在您可以从软件的分解(体系结构)开始,一个接一个地添加任务,使用与其他任务的小接口。 RTOS 库将通过为您提供进程间通信元素 (events/queues/mailboxes) 来实现这些接口。
在理想的基于 RTOS 的体系结构中,每个任务都应从邮箱(或事件或队列等)中接收其工作数据包作为项目。 每当该任务没有其他项目(消息、事件、队列数据等)时,RTOS 内核将阻止 该任务并切换到另一个任务准备执行。 这样,只有有工作要做的任务才会实际消耗 CPU 时间。
如果有多个任务准备执行,那么运行下一个任务的选择取决于调度算法,你必须[=60] =] 在配置 RTOS 库时。 通常,典型的嵌入式系统中的任务被分配了不同的优先级,因此如果没有ready[=39=,任务只会占用CPU ] 优先级更高的任务。 因此,RTOS 为您提供了一个完美的解决方案来实现一个同时执行紧急和非紧急任务的系统,例如。例如,有和没有实时要求的任务。