Ist es möglich, Echtzeitsoftware auszuführen?

60

Ich weiß, es läuft unter Linux und es gibt Echtzeit-Patches für Linux. Würden diese Patches funktionieren?

Hat jemand ein anderes Echtzeit-Betriebssystem auf dem Raspberry Pi ausprobiert?

Die Idee ist, die Platine für zeitkritische Regelungs- und Steuerungsaufgaben zu verwenden.

Lars Pötter
quelle
2
Ich denke, der einzige Grund, der einem in den Sinn kommt, warum man das nicht könnte, wäre, wenn die geschlossene GPU-Lösung im Weg wäre. Vorausgesetzt, Sie können sich dafür entscheiden, die GPU bei Ihren Echtzeitaufgaben einfach zu ignorieren, würde ich denken, dass die Echtzeiterweiterungen funktionieren könnten.
Chris Stratton
7
Das gesamte Himbeer-Pi-System kann nicht geändert werden. Die Frage wäre, ob der Teil, der nicht (die GPU) ist, bereit wäre, während der Ausführung Ihrer Echtzeitaufgaben aus dem Weg zu gehen, oder ob dies unvermeidlich entweder Buszyklen für den Zugriff auf den RAM oder sogar "Aufmerksamkeit" erfordert "aus dem ARM - Kern in einer Weise, die harte Timing - Ziele vereiteln würde.
Chris Stratton
4
Anscheinend ist RISCOS für bestimmte Echtzeitanwendungen recht gut geeignet und der Raspberry Pi-Port läuft gut. * 8 ')
Mark Booth
4
RISCOS ist kein Echtzeit-Betriebssystem (gemäß Ihrem Wikipedia-Link). Wie könnte es also helfen?
Lars Pötter
4
Der CONFIG_PREEMPT_RT-Patch wurde auf mehreren ARM-Prozessoren unter Linux demonstriert . Es kann einige Latenzprobleme geben, die jedoch in der Größenordnung von Mikrosekunden messbar sein sollten.
Durchbruch

Antworten:

16

Möglicherweise möchten Sie Xenomai auf RaspberryPi ausführen . Hier finden Sie eine Anleitung dazu. Kurz gesagt, Xenomai ist ein Projekt, das einen benutzerdefinierten Linux-Kernel erstellt hat (sie stellen Patches bereit, die auf die Kernelquellen angewendet werden müssen), mit denen ein anderer Kernel (Xenomai-Kern) in Echtzeit ausgeführt werden kann. Auf diese Weise können Xenomai-Anwendungen auf einer Vielzahl von Hardware-Komponenten ausgeführt werden, ohne dass Treiber dafür geschrieben werden müssen (da Linux mit einer Vielzahl von Hardware-Komponenten arbeitet). Dies ermöglicht das Schreiben von RT-Anwenderbereichsanwendungen unter Verwendung verschiedener verfügbarer RT-APIs.

Krzysztof Adamski
quelle
1
Welche maximale Frequenz kann ich mit diesem Tool erreichen? Ich bin daran interessiert, einen Gleichstrommotor mit einer Frequenz von rund 1 kHz zu steuern
Nicolás Arias,
19

Im Linux-Kernel bietet die Aktivierung PREEMPT_RTbegrenzte Latenzen und Echtzeit-APIs. Neben der Konfiguration PREEMPT_RTmüssen auch die Richtlinien SCHED_FIFOund SCHED_RRausgewählt werden. Außerdem müssen die Anwendungen Echtzeitparameter festlegen, indem sie entsprechende APIs aufrufen oder entsprechende Dienstprogramme verwenden.

Laut einem Training für freie Elektronen: Echtzeit in Embedded Linux war PREEMPT_RT ein Projekt, das Echtzeitfähigkeit in den Kernel bringt. Es wurde vollständig in den 2.6.33- und 3.0-Kernel-Stream integriert. Im Dokument finden Sie alles.

Grundsätzlich gibt es zwei Ansätze, um dem Linux-Kernel Echtzeitfähigkeit zu verleihen:

  • Ändern Sie innerhalb des Kernels, das ist PREEMPT_RTProjekt.
  • Führen Sie die Echtzeit - Teil Seite an Seite mit einem normalen Kernel und unter dem normalen Kernel gibt es drei Generationen: RTLinux, RTAI, und Xenomai. ( Aedoswie Aviounten erwähnt?)

Bearbeiten:

Minghua
quelle
2
Willkommen bei Raspberry Pi, nette Antwort! Die RT PREEMPT patchvon Ingo Molnar zusammen mit High Resolution Timers(HRT) -Unterstützung verwendeten Funktionen ermöglichen es dem Kernel, Echtzeitfähigkeiten zu erreichen . Gegenwärtig erreicht die Unterstützung 3.4.11 Kernel und die "gute Nachricht" ist, dass der Patch "schrumpft", so dass es den Anschein hat, als würde das meiste davon in den Mainstream-Kernel-Quellen enthalten sein. Sie können ein hervorragendes Tutorial finden , wie es anzuwenden und hier .
Avio
1
Und vergessen Sie nicht, Adeos unter den Alternativen zu nennen, um unter Linux eine harte Echtzeitunterstützung zu bieten.
Avio
2
Ich muss erwähnen, dass es keine einfache Sache ist, PREEMPT_RT mit dem Raspberry Pi-Kernel zum Laufen zu bringen. Wenn Sie einfach den Patch anwenden, wird ein nicht funktionierender Kernel erzeugt. Es gibt auch viele neue Treiber im Raspberry Pi-Kernel, und diese Treiber wurden weder mit PREEMPT_RT getestet, noch wurden sie von übermäßig langen Ruhezuständen befreit. Das ist also eine sehr in Bearbeitung befindliche Arbeit.
Nakedible
2
Irgendwelche Updates zu diesem? Sind die Treiber jetzt stabil genug, um diesen Kernel-Patch zu verwenden? Ich würde ein funktionierendes Tutorial für Leute lieben, die noch keinen Kernel kompiliert haben.
Fabb
@fabb: Auch nach vielen Jahren wird es noch Fahrer geben, die Pannen gegen die RT-Anforderung haben. Sie werden es nur herausfinden, indem Sie es ausführen. Übrigens sehe ich in letzter Zeit einige Netzwerkprobleme, die die Prioritäten einiger Anwendungen für den Benutzerbereich erhöht haben, was unerwartet ist. All diese Situationen sind jedoch sehr konfigurations- und anwendungsspezifisch.
Minghua
6

Wyolum verwendet den aLaMode (ich nenne ihn den Almond Pi), um stapelbar auf den Pi zu passen. Es verfügt über eine Echtzeituhr, verwendet einen aTiny 328, speist den GPIO Real UART / Strom und ist auf verschiedene Arten flashbar. Es ist großartig, weil der Pi tun kann, was immer Sie wollen, Webserver / Datenbank, während der Arduino in Echtzeit-Interrupt läuft.

Bildbeschreibung hier eingeben

Piotr Kula
quelle
1
Es mag ein bisschen unpraktisch erscheinen, zwei Mikrocontroller laufen zu lassen, aber dies stellt andererseits einen Echtzeitbetrieb sicher, wenn die anderen Ansätze nicht schnell genug sind.
fabb
1
Gibt es Hinweise, wie das RPi sauber mit dem anderen µC kommunizieren kann, ohne den Regelkreis zu verlangsamen?
Fabb
1
Ja, aber der µC müsste den UART abfragen, damit UART-Interrupts den Timer-Interrupt des Regelkreises nicht verschieben. Würde ich dann den UART am Anfang des Regelkreises abfragen und sicherstellen, dass ich nicht zu viele Bytes lese, damit es nicht zu lange dauert? Oder könnten die UART-Puffer zu leicht überlaufen? Oder wäre die Frequenz des Regelkreises so viel höher als die UART-Geschwindigkeit, dass das Lesen eines Bytes pro Regelkreis, falls verfügbar, mehr als ausreichend wäre?
Fabb
1
Netter Vorschlag. Übrigens ist Raspberry Pi Alamode bereits ein Wortspiel. Ala-Modus ist, wenn Sie Eis auf Torte setzen.
Dan
1
Ja wirklich ? Hehe Ich fragte mich, was das wohl bedeutete. Macht jetzt Sinn :)
Piotr Kula
2

Die beste Lösung, die ich bisher gesehen habe, ist das X10i - Real Time Control Board für Raspberry Pi von Heber.

X10i ist ein universeller, leistungsstarker und sicherer Echtzeit-Controller, der die Steuerung mehrerer Ein- / Ausgänge über USB von jedem PC-System aus ermöglicht. Damit Programmierer, Erfinder und Entwickler noch einfacher von ihrem PC aus mit der Außenwelt in Verbindung treten können, bietet Heber Unterstützung in vielen Programmiersprachen.

Der obige Link bietet eine ausgezeichnete und umfassende Dokumentation und sie versuchen, die Treiber mit der neuesten Version von Debian für Pi auf dem neuesten Stand zu halten.

Jivings
quelle
Also brauchst du einen Flachbandstecker vom Pi dazu? Ich kann kein Foto von dem Ding finden, aber es sieht wirklich sperrig aus. Es hat viele Beispiele, also ist es gut, denke ich. +1
Piotr Kula
Ich kann nicht sagen, dass ich es benutzt habe, aber ich würde es erwarten, obwohl ich mich an den Typ zu erinnern scheine, der in der Demo eine USB-Schnittstelle verwendet. Es ist ziemlich sperrig, obwohl ja.
Jivings
1

Hier ist ein Artikel über Raspberry Pi, der mit Xenomai läuft .

Pierre-Jean Coudert
quelle
5
Hallo. In der Regel raten wir von Antworten ab, bei denen es sich lediglich um Links handelt, falls die verknüpfte Seite verschoben wird. Können Sie die Informationen auf dieser Seite in Ihrer Antwort zusammenfassen? Sie können dann den Link als Referenz einfügen. Vielen Dank!
Jivings,
1

RODOS ist eine weitere Option. Es ist ein Open Source-Projekt, das vom Deutschen Zentrum für Luft- und Raumfahrt und dem Team und den Studenten der Universität von Prof. Montenegro entwickelt wurde.

Es verwendet C ++, ist vollständig objektorientiert geschrieben und unterstützt ARM7, Atmel AVR, STM32 / Cortex-M3, Xilinx, Raspberry Pi :), ...

Es wird derzeit in Satelliten-TET und in LoTTo-Maschinen verwendet, wenn ich das nicht falsch verstanden habe.

Natürlich würde ich es vorziehen, es über Linux (was möglich ist) laufen zu lassen, um das Beste aus beiden Welten zu haben - aber dann bleiben die REAL TIME-Fragen, weil ich nicht sicher bin, ob es möglich ist, dass Linux die richtige API bereitstellt.

Um RODOS zu bekommen, muss man eine Nachricht an Prof. Sergio Montenegro oder das DLR (Deutsches Zentrum für Luft- und Raumfahrt) schreiben.

Radagast
quelle
1

Neben Linux gibt es Echtzeit-Betriebssysteme. Sehr beliebt bei den Open-Sourcing-Anbietern ist ChibiOS / RT:

ist ein vollständiges, portables, Open Source, kompaktes und extrem schnelles RTOS (Real-Time Operating System)

Eine kurze Einführung finden Sie unter http://chibios.org/dokuwiki/doku.php?id=chibios:documents:introduction . Da es sich nicht um Linux handelt, könnten Ihnen auch die Lesarten von

Nun, es gibt einige Designentscheidungen, die erklärt werden sollten und dazu beitragen, ChibiOS / RT zu einem besonderen Design zu machen. Nichts wirklich Neues an sich, aber das Ganze ist interessant.

oder nicht. Wenn es Ihnen gefällt, lohnt sich das Experimentieren mit dem Pi möglicherweise unter https://github.com/steve-bate/ChibiOS-RPi :

ChibiOS-Gabel für Raspberry PI-Experimente.

Der Autor fügt eine nette Anleitung bei

http://www.stevebate.net/chibios-rpi/GettingStarted.html

Wenn es um RTOS geht, ist Linux für mich wie das Tragen von Cross-Alpine-Equipment für einfache ländliche Bedürfnisse. Sie könnten es einfach nicht brauchen. Sogar ein Pi könnte zu viel sein. Noch weniger Gewicht erhalten Sie unter http://forum.arduino.cc/index.php?topic=144715.0 :)

Jitter
quelle