Ich habe viel Bare-Metal-Code für PIC- und x86-Prozessoren geschrieben. Kann mir jemand sagen wie und wann ich ein Betriebssystem brauche? Umgekehrt kann mit welcher Anwendung oder Situation auch ohne Betriebssystem umgegangen werden?
Ich habe viel Bare-Metal-Code für PIC- und x86-Prozessoren geschrieben. Kann mir jemand sagen wie und wann ich ein Betriebssystem brauche? Umgekehrt kann mit welcher Anwendung oder Situation auch ohne Betriebssystem umgegangen werden?
Antworten:
Als Faustregel gilt, dass Sie ein Betriebssystem in Betracht ziehen sollten, wenn das Produkt eines oder mehrere der folgenden Elemente erfordert: einen TCP / IP-Stapel (oder einen anderen komplexen Netzwerkstapel), eine komplexe GUI (möglicherweise eine mit GUI-Objekten wie Fenstern und Ereignissen) ) oder ein Dateisystem.
Wenn Sie eine Bare-Metal-Codierung durchgeführt haben, sind Sie wahrscheinlich mit der Super-Loop- Programmarchitektur vertraut . Wenn die Firmware-Anforderungen des Produkts einfach genug sind, um mit einer Super-Loop implementiert zu werden, die wartbar (und hoffentlich etwas erweiterbar) ist, benötigen Sie wahrscheinlich kein Betriebssystem.
Mit steigenden Softwareanforderungen wird die Super-Loop komplexer. Wenn die Softwareanforderungen so hoch sind, dass die Super-Loop zu komplex wird oder die Echtzeitanforderungen des Systems nicht erfüllen kann, ist es an der Zeit, eine andere Architektur in Betracht zu ziehen.
Mit einer RTOS-Architektur können Sie die Softwareanforderungen in Aufgaben unterteilen. Bei ordnungsgemäßer Ausführung vereinfacht dies die Implementierung der einzelnen Aufgaben. Durch die Priorisierung von Aufgaben kann ein RTOS die Erfüllung von Echtzeitanforderungen vereinfachen. Ein RTOS ist jedoch kein Allheilmittel. Ein RTOS erhöht die Komplexität des Gesamtsystems und öffnet Sie für neue Arten von Fehlern (z. B. Deadlocks). Als Alternative zum RTOS kann eine ereignisbasierte Zustandsmaschinenarchitektur (z. B. QP ) in Betracht gezogen werden .
Wenn Ihr Produkt über ein Netzwerk, eine komplexe Benutzeroberfläche und ein Dateisystem verfügt, sind Sie möglicherweise an dem Punkt angelangt, an dem Sie Betriebssysteme mit vollem Funktionsumfang wie VxWorks, Windows oder Linux in Betracht ziehen sollten. Voll ausgestattete Betriebssysteme enthalten Treiber für die grundlegenden Details und ermöglichen es Ihnen, sich auf Ihre Anwendung zu konzentrieren.
Es hängt wirklich von Ihrer Definition eines "eingebetteten Systems" ab. Es mag einige geben, die behaupten, wenn es keine Bare-Metal-Programmierung ist, ist es nicht eingebettet (was Ihre Frage ausschließt), aber ich würde dem nicht zustimmen - ich würde argumentieren, dass jedes System, das nur eine Funktion ausführen soll, Das heißt, nur eine bestimmte 'Anwendung' auszuführen, könnte als eingebettetes System bezeichnet werden.
Das heißt, es sollte ziemlich einfach sein, sich Situationen vorzustellen, die von den Diensten eines ausgewachsenen Betriebssystems profitieren würden. Zum Beispiel ist es bei meiner Arbeit üblich, dass Leute Testgeräte auf einer Instrumenten-Design-Suite bauen, die auf Fenstern ausgeführt wird. Diese Systeme sind so konfiguriert, dass sie in die Teststationskonfiguration booten und die allgemeine Verwendung sperren (um eine Beschädigung der Station zu verhindern). Es handelt sich daher möglicherweise um eingebettete Systeme.
Wenn Sie jedoch nur handelsübliche E / A-Module kaufen, diese in einen Rack-PC einstecken und eine Konfiguration in einer grafischen Benutzeroberfläche erstellen, kann dies für manche nicht als Entwurf eines eingebetteten Systems gelten . Für eine etwas weniger standardmäßige Situation sollten Sie einen benutzerdefinierten Prozesscontroller mit einem FPGA in Betracht ziehen, für den Sie eine ausgefallene Datenprotokollierung durchführen möchten. Sie können ein Softcore-Prozessorsystem (mit einem vorhandenen BSP) einbetten und ein Echtzeit-Linux ausführen, um einen Netzwerkstack (für Ihre Protokollierung und NTP usw.) auszuführen und alles andere in der Logik zu erledigen.
Meine (sehr vage) Faustregel lautet: Wenn Sie mehr als einen Steuerthread benötigen (sagen wir, mindestens ein Gerät, das ein Protokoll oder eine Zustandsmaschine enthält, und noch etwas anderes), wird Ihnen die Verwendung von OSish-Software das Leben erleichtern
switch
-basierenden Zustandsautomaten nicht darüber hinausgeht, sind die auf switch
-basierenden Automaten besser geeignet. Außerdem habe ich auf 8x51- und TMS2000-Plattformen einen einfachen Stack-basierten kooperativen Task-Switcher implementiert. Keine Betriebssystemlogik, um zu entscheiden, wann umgeschaltet werden soll - jedes Mal, wenn ein "Thread" glaubte, dass er eine Pause machen könnte, würde er zum anderen wechseln. Wenn die andere Thread sieht , dass etwas , das es für wartet hatte noch nicht geschehen, könnte es in weniger Zeit als ein normales O auf den ersten zurückschalten würde verbracht haben zu entscheiden , ob zu wechseln.
Eine alte Frage werde ich aber trotzdem kommentieren.
Selbst wenn Sie nicht über Netzwerkstapel oder ähnliches verfügen, können Sie an dem Punkt, an dem Sie einen Taskplaner benötigen, da in Ihrer eingebetteten Anwendung genügend Prozesse vorhanden sind, ein RTOS in Betracht ziehen. Das Schreiben eines einfachen zeitgesteuerten kooperativen Multitasking-Schedulers ist nicht allzu schwierig. Es kann jedoch eine Weile dauern, bis der Rest der Anwendung durch einen festgefahrenen Prozess blockiert wird. Sie müssen ein Prioritätssystem mit einer Art Vorkehrung implementieren, um Prozesse in der Warteschlange zu blockieren, wenn sie nicht abgeschlossen wurden.
RTOS bietet auch Funktionen wie Speicherschutz und Ähnliches, die das Aufspüren einiger gängiger Gaffes in C-Code erheblich vereinfachen. Einfache Mikrocontroller sind jedoch möglicherweise nicht in der Lage, einen komplexen Speicherschutz zu handhaben. Mit MSP430 können Sie beispielsweise Code und Daten auf hoher Ebene trennen, es gibt jedoch keine fein abgestimmte Speicherzugriffskontrolle.
Ein Betriebssystem überbrückt tatsächlich die Lücke zwischen Hardware und Anwendungssoftware (über den Gerätetreiber). Mit anderen Worten, es bietet dem Programmierer eine relativ hochwertige Plattform, die letztendlich die Codekomplexität verringert. Darüber hinaus bietet das Betriebssystem eine starke und flexible Plattform für die Ausführung von Anwendungen.