Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Real time 使用实时Linux开始编程的最佳方式是什么?_Real Time_Embedded Linux_Rtos - Fatal编程技术网

Real time 使用实时Linux开始编程的最佳方式是什么?

Real time 使用实时Linux开始编程的最佳方式是什么?,real-time,embedded-linux,rtos,Real Time,Embedded Linux,Rtos,虽然我已经用C语言实现了许多项目,但我对操作系统还是完全陌生的。我在Discovery board(STM32)上尝试了实时linux,得到了LED闪烁的正确结果,但我没有真正理解整个过程,因为我只是按照步骤进行操作,在internet上找不到每个步骤的完整描述 我想在实时linux上实现调度。最好的开始方式是什么?有网站、书籍、教程吗 完整的RTLinux过程描述将不胜感激 如果你想学习实时操作系统,那么我建议你买一个FPGA,比如Altera DE2,然后用你自己的操作系统和UCO进行实验。

虽然我已经用C语言实现了许多项目,但我对操作系统还是完全陌生的。我在Discovery board(STM32)上尝试了实时linux,得到了LED闪烁的正确结果,但我没有真正理解整个过程,因为我只是按照步骤进行操作,在internet上找不到每个步骤的完整描述

我想在实时linux上实现调度。最好的开始方式是什么?有网站、书籍、教程吗

完整的RTLinux过程描述将不胜感激


如果你想学习实时操作系统,那么我建议你买一个FPGA,比如Altera DE2,然后用你自己的操作系统和UCO进行实验。您可以阅读一篇关于嵌入式RTO的好文章


你也可以得到一个软件包,并为此编写自己的操作系统

实时Linux环境相当混乱。99.99%的信息完全过时了

首先,有很多“微内核”将Linux作为一项任务运行。(比如已经不存在的RTLinux)。问题是,您必须将实时任务写入不同的API,并且不能依赖Linux中的任何东西,因为当您的任务运行时,Linux将被冻结在后台。因此,除非你的任务非常简单(“当我按下这个按钮时停止马达”),否则这种方法将带来更多的痛苦而不是收获

接下来是实时Linux补丁集。因为下一项:

最后,在过去,当前的Linux内核导致人们需要实时性。您甚至可以在其中一个处理器上关闭Linux,以进行升级。另见

回答你的问题:我认为你可以走两条不同的道路:

1) 从一个普通的3.xx Linux内核开始,探索各种API和实时技术(即实时优先级、内存固定等),这可以让你“足够接近”人们想要“实时”的99%。如果它对高频交易来说足够好,那么对你来说可能就足够好了

2) 如果你有一个硬性的实时需求,并且你担心Linux不能满足它,那么(正如Nick上面提到的),只需购买一个处理器,在没有操作系统的情况下编写实时代码。通过将“实时”和“非实时”代码拆分到不同的CPU上,您将使整个系统变得更简单,更健壮。

从“裸机”到基于操作系统的编程的过渡是我经历的相反的事情。我一开始是一个完整的软件人,完全投入到操作系统方面,随着时间的推移,我已经转向了相反的方向(甚至用VHDL设计电路!)。我的建议是从简单开始。Linux是相当复杂的,在你所看到的每一个地方,都有许多层次的东西在一起工作以交付最终产品。如果你对实时linux扩展一成不变,我很乐意建议哪一个是linux的实时扩展

然而,为了更具体地解决您关于在Linux中实现调度的问题,您可以这样做,但这将是一项大量的工作,并且可能非常复杂。操作系统使用一个完全公平的调度过程(),每当你启动一个线程时,它就会被添加到列表中运行。如果您将代码作为驱动程序在内核空间中实现,或者依赖硬件中断等,那么这可能会略有不同,但一般来说,Linux就是这样工作的。实时通常意味着它能够分配线程几个不同优先级中的一个,并在任何给定的时间充分利用线程抢占,而这些概念实际上并不是普通Linux的一部分。它对此有一些概念,但它有一些限制,当您从Linux寻找实时行为时,可能会导致问题


RTOS可能对您有所帮助。如果你正在寻找一个完整的实时操作系统,请查看FreeRTOS。它有一个很大的社区,支持许多不同的设备,并且有大量的示例代码。他们甚至用一个示例包来支持您的特定板,因此您可以毫无损失地尝试一下。它让您可以访问许多OS-ish结构,如网络API、内存管理和线程,而无需庞大OS的开销和延迟。使用RTOS,您可以创建任务并为其分配优先级,这样您就可以成为调度程序,不再受操作系统的支配。你运行操作系统,而不是操作系统运行你(如果这有意义的话)。此外,RTOS中提供的构造感觉很像裸机代码,因此更易于理解、理解和全面学习。学习Linux或Windows等成熟操作系统的基本构建块是一个更简单的世界。如果这个选项听起来不错,我建议你在FreeRTOS网站上浏览一下受支持的设备,然后选择一个你想尝试的设备,然后去尝试。我强烈建议将此作为了解调度和操作系统构造的一种方法,因为它尽可能简单,并且是开源的。一旦你掌握了RTOS的基本知识,买一本专门介绍Linux的书也不是一个坏主意。尽管网上有许多与学习Linux相关的免费资源,但它们通常是相互矛盾的,并且可能会产生误导。在学习Linux特定知识的同时,还要学习操作系统,这会让人感觉难以承受。从简单开始将有助于防止你精疲力竭,并将你感到失落的时间降到最低。Linux绝对是一个学习过程,但与任何学习过程一样,从简单开始,牢记最终目标,制定计划,并按照计划采取小的、可管理的步骤,直到您查找并找到自己想要的位置。那就去征服下一座山吧

像这样类似的问题,“最好的”(IMHO)方法就是去做。然后一次又一次地做。。如果你不知道从哪里开始,研究一个已经开始的项目