2015-03-30 47 views
2

尽管我已经在C中实现了很多项目,但我对操作系统完全陌生。我在Discovery主板(STM32)上试用了实时Linux,并获得了LED闪烁的正确结果,但由于我只是按照步骤进行操作,无法在互联网上找到每一步的完整描述,所以我并不完全了解整个过程。使用Real Time Linux开始编程的最佳方式是什么?

我想在实时linux上实现调度。什么是最好的开始?任何网站,书籍,教程可用?

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

谢谢进阶

+3

像这样类似的问题,“最好”(IMOHO)的方式就是*去做吧*。然后*重做*和*再次*如果您不知道从哪里开始,请研究一个已经开始的项目并对其进行处理/模仿。如果您对特定的代码或流程有特定的问题,请阅读文档(或专门询问)。调整学习策略以适应你。 – user2864740 2015-03-30 23:43:17

回答

4

从“裸机”向基于操作系统的编程过渡是我经历的反向事件。我开始了一个完整的软件人员,完全进入OS的一面,随着时间的推移,我转向了与之相反的方向(甚至用VHDL设计电路!)。我的建议是从简单开始。 Linux非常复杂,无论你在哪里看到,都有很多层次的东西一起工作来提供最终产品。如果你已经死在一个实时Linux扩展,我很乐意推荐https://xenomai.org/这是一个Linux的实时扩展。

但是,要更具体地解决有关在Linux中执行调度的问题,您可以,但这将是一项大量工作,并且可能非常复杂。操作系统使用完全公平的调度过程(http://en.wikipedia.org/wiki/Completely_Fair_Scheduler),每当你启动一个线程时,它就会被添加到列表中运行。如果您在内核空间中将您的代码作为驱动程序实施,依靠硬件中断等,这可能会有所不同,但总的来说,这就是Linux的工作原理。实时通常意味着它有能力分配线程中的几个不同优先级之一,并在任何给定时间完全利用线程抢占,这些概念实际上并不属于vanilla Linux。它有一些这样的概念,但是它有一些局限性,当你从Linux中寻找实时行为时会导致问题。

对您有帮助的是RTOS。如果您正在寻找完整的实时操作系统,请查看FreeRTOS http://www.freertos.org/。它拥有一个庞大的社区,并通过大量示例代码支持许多不同的设备。他们甚至用一个示例包来支持你的特定板子,所以你可以给它一个没有失去的东西! http://www.freertos.org/FreeRTOS-for-Cortex-M3-STM32-STM32F100-Discovery.html。它使您能够访问许多操作系统ish构造,如网络API,内存管理和线程,而无需巨大操作系统的开销和延迟。使用RTOS,您可以创建任务并为其分配优先级,以便您成为调度程序,而不再受操作系统的限制。你运行的操作系统,而不是操作系统运行你(如果这是有道理的)。此外,RTOS中提供的结构将非常类似于裸机代码,因此将更容易遵循,理解和充分学习。学习Linux或Windows等完整操作系统的基础构建块是一个更简单的世界。如果这个选项听起来不错,我会建议在FreeRTOS网站上查看所支持的设备,然后选择一个你想要试验的设备,然后去做。我强烈建议这是一种通用的调度和操作系统结构的学习方式,因为它可以像开源一样简单。一旦你掌握了RTOS的基础知识,购买一本关于Linux的书不是一个坏主意。尽管网络上有许多免费资源与学习Linux相关,但它们通常是相互矛盾的,可能会产生误导。一般来说,学习Linux专用知识和操作系统,它会感觉压倒性的。更简单的开始将有助于防止被烧毁,并最大限度地减少你感到迷失的时间。 Linux绝对是一个学习过程,但是像任何学习过程一样,从简单开始,记住最终目标,制定计划,并沿着该计划采取小型,可管理的步骤,直到您查找并准确找到自己想要的位置。然后去解决下一座山!

0

如果您想学习实时操作系统,那么我建议您获得一个FPGA,例如Altera DE2,并尝试使用您自己的操作系统和ucos。您可以阅读关于嵌入式RTOS here的好文本。

你也可以得到一个Linux Raspberry并编写你自己的操作系统。

2

实时Linux环境非常混乱。 99.99%的信息仅仅是过时的。

首先,有很多“微内核”将Linux作为一项任务运行。 (如已停用的RTLinux)。问题在于你必须将你的实时任务写入不同的API,并且不能依赖于任何在Linux中的任何东西,因为在任务运行时Linux将在后台被冻结。所以除非你的任务很简单(“按下这个按钮时停止电动机”),否则这种方法会比增益造成更多的痛苦。

接下来,有一个实时的Linux补丁集。 This hasn't been doing so well.因为下一个项目:

最后,目前的Linux内核有gotten rid of the problems,导致人们过去需要实时。您甚至可以将您的某个处理器上的Linux关闭至have full control of the CPU。另见this paper

要回答你的问题:我看到两个不同的路径,你可以采取:

1)启动与正常3.xx的Linux内核,并探索各种API和实时技术(即实时优先级,内存牵制,等等)这可以让你“足够接近”99%的人们想要的“实时”。如果它对于高频交易来说足够好,那对你来说可能已经足够了。 2)如果你有一个很难实时的需求,并且担心Linux不会削减它,那么(就像Nick提到的那样),只要去购买一个处理器,然后编写没有OS的实时代码。通过将“实时”和“非实时”代码分解到不同的CPU上,可以使整个系统更简单,并且更加稳健。

相关问题