Eingebettetes System - Embedded system

Ein eingebettetes System auf Steckkarte mit Prozessor, Speicher, Netzteil und externen Schnittstellen

Ein eingebettetes System ist ein Computersystem – eine Kombination aus Computerprozessor , Computerspeicher und Eingabe-/Ausgabe- Peripheriegeräten – das eine dedizierte Funktion innerhalb eines größeren mechanischen oder elektronischen Systems hat. Es ist als Teil eines kompletten Geräts eingebettet , das häufig elektrische oder elektronische Hardware und mechanische Teile umfasst. Da ein eingebettetes System typischerweise den physischen Betrieb der Maschine steuert, in die es eingebettet ist, unterliegt es häufig Einschränkungen bei der Echtzeitberechnung . Eingebettete Systeme steuern viele heute gebräuchliche Geräte. Im Jahr 2009 wurde geschätzt, dass 98 Prozent aller hergestellten Mikroprozessoren in eingebetteten Systemen verwendet wurden.

Moderne eingebettete Systeme basieren oft auf Mikrocontrollern (dh Mikroprozessoren mit integriertem Speicher und Peripherieschnittstellen), aber auch gewöhnliche Mikroprozessoren (unter Verwendung externer Chips für Speicher- und Peripherieschnittstellenschaltungen) sind üblich, insbesondere in komplexeren Systemen. In jedem Fall können die verwendeten Prozessoren Typen sein, die von Allzweck- bis hin zu solchen, die auf eine bestimmte Klasse von Berechnungen spezialisiert sind, reichen oder sogar speziell für die vorliegende Anwendung entwickelt wurden. Eine übliche Standardklasse dedizierter Prozessoren ist der digitale Signalprozessor (DSP).

Da das eingebettete System bestimmten Aufgaben gewidmet ist, können Konstrukteure es optimieren, um die Größe und Kosten des Produkts zu reduzieren und die Zuverlässigkeit und Leistung zu erhöhen. Einige eingebettete Systeme werden in Massenproduktion hergestellt und profitieren von Skaleneffekten .

Eingebettete Systeme reichen in ihrer Größe von tragbaren persönlichen Geräten wie Digitaluhren und MP3-Playern bis hin zu größeren Maschinen wie Haushaltsgeräten , industriellen Montagelinien , Robotern, Transportfahrzeugen, Ampelsteuerungen und medizinischen Bildgebungssystemen . Oft bilden sie Teilsysteme anderer Maschinen wie der Avionik in Flugzeugen. Große Installationen wie Fabriken , Pipelines und Stromnetze basieren auf mehreren eingebetteten Systemen, die miteinander vernetzt sind. Verallgemeinert durch Softwareanpassung umfassen eingebettete Systeme wie speicherprogrammierbare Steuerungen häufig ihre Funktionseinheiten.

Eingebettete Systeme reichen von solchen mit geringer Komplexität mit einem einzigen Mikrocontroller-Chip bis hin zu sehr hohen mit mehreren Einheiten, Peripheriegeräten und Netzwerken, die sich in Geräteracks oder über große geografische Gebiete befinden können, die über Fernkommunikationsleitungen verbunden sind.

Geschichte

Hintergrund

Der Ursprung des Mikroprozessors und der Mikrocontroller kann auf die zurückverfolgt wird integrierte MOS - Schaltung , die eine integrierte Schaltungschip hergestellt von MOSFETs (Metall-Oxid-Halbleiter - Feldeffekttransistoren ) und wurde in den frühen 1960er Jahren entwickelt. Bis 1964 hatten MOS-Chips eine höhere Transistordichte und niedrigere Herstellungskosten als bipolare Chips erreicht. Die Komplexität von MOS-Chips nahm mit einer vom Mooreschen Gesetz vorhergesagten Rate weiter zu , was Ende der 1960er Jahre zu einer großflächigen Integration (LSI) mit Hunderten von Transistoren auf einem einzigen MOS-Chip führte. Die Anwendung von MOS-LSI-Chips auf Computer war die Grundlage für die ersten Mikroprozessoren, als Ingenieure erkannten, dass ein komplettes Computerprozessorsystem auf mehreren MOS-LSI-Chips enthalten sein könnte.

Die ersten Multi-Chip-Mikroprozessoren, das Four-Phase Systems AL1 im Jahr 1969 und das Garrett AiResearch MP944 im Jahr 1970, wurden mit mehreren MOS-LSI-Chips entwickelt. Der erste Single-Chip-Mikroprozessor war der Intel 4004 , der 1971 veröffentlicht wurde. Er wurde von Federico Faggin unter Verwendung seiner Silicon-Gate- MOS-Technologie zusammen mit den Intel- Ingenieuren Marcian Hoff und Stan Mazor sowie dem Busicom- Ingenieur Masatoshi Shima entwickelt .

Entwicklung

Eines der ersten erkennbar modernen eingebetteten Systeme war der Apollo Guidance Computer , der ca. 1965 von Charles Stark Draper am MIT Instrumentation Laboratory . Zu Beginn des Projekts galt der Apollo-Leitcomputer als das riskanteste Element im Apollo-Projekt, da er die damals neu entwickelten monolithischen integrierten Schaltkreise verwendete , um die Größe und das Gewicht des Computers zu reduzieren.

Ein frühes massenproduziertes eingebettetes System war der 1961 veröffentlichte Autonetics D-17-Leitcomputer für die Minuteman-Rakete . Als der Minuteman II 1966 in Produktion ging, wurde der D-17 durch einen neuen Computer ersetzt, der den ersten Massenverwendung von integrierten Schaltkreisen.

Seit diesen frühen Anwendungen in den 1960er Jahren sind die Preise für eingebettete Systeme gesunken, und die Verarbeitungsleistung und -funktionalität sind dramatisch gestiegen. Ein früher Mikroprozessor , der Intel 4004 (veröffentlicht 1971), wurde für Taschenrechner und andere kleine Systeme entwickelt, benötigte jedoch noch externen Speicher und Unterstützungschips. In den frühen 1980er Jahren waren Speicher-, Eingabe- und Ausgabesystemkomponenten in denselben Chip integriert wie der Prozessor, der einen Mikrocontroller bildete . Mikrocontroller finden Anwendungen, bei denen ein Allzweckcomputer zu teuer wäre. Als die Kosten für Mikroprozessoren und Mikrocontroller sanken, nahm die Verbreitung eingebetteter Systeme zu.

Heutzutage kann ein vergleichsweise kostengünstiger Mikrocontroller so programmiert werden, dass er die gleiche Rolle wie eine große Anzahl separater Komponenten erfüllt. Mit Mikrocontrollern wurde es möglich, auch in Consumer-Produkten teure analoge Komponenten auf Knopfdruck wie Potentiometer und variable Kondensatoren durch Auf-/Ab-Tasten oder von einem Mikroprozessor ausgelesene Knöpfe zu ersetzen . Obwohl in diesem Zusammenhang ein eingebettetes System in der Regel komplexer ist als eine herkömmliche Lösung, liegt der größte Teil der Komplexität im Mikrocontroller selbst. Möglicherweise sind nur sehr wenige zusätzliche Komponenten erforderlich, und der größte Teil des Konstruktionsaufwands liegt in der Software. Softwareprototypen und -tests können im Vergleich zum Entwurf und Aufbau einer neuen Schaltung ohne Verwendung eines eingebetteten Prozessors schneller erfolgen.

Anwendungen

Embedded Computer Sub-Assembly für Accupoll Electronic Voting Machine

Eingebettete Systeme finden sich häufig in Verbraucher-, Industrie-, Automobil- , Haushaltsgeräte- , Medizin-, Telekommunikations-, kommerziellen und militärischen Anwendungen.

Telekommunikationssysteme verwenden zahlreiche eingebettete Systeme von Telefonvermittlungen für das Netzwerk bis hin zu Mobiltelefonen beim Endbenutzer . Computernetzwerke verwenden dedizierte Router und Netzwerkbrücken, um Daten weiterzuleiten.

Unterhaltungselektronik umfasst MP3-Player , Fernseher , Mobiltelefone , Videospielkonsolen , Digitalkameras , GPS- Empfänger und Drucker . Haushaltsgeräte wie Mikrowellenherde , Waschmaschinen und Geschirrspüler umfassen eingebettete Systeme, um Flexibilität, Effizienz und Funktionen zu bieten. Moderne HLK- Systeme verwenden vernetzte Thermostate , um die Temperatur, die sich je nach Tages- und Jahreszeit ändern kann, genauer und effizienter zu steuern . Die Hausautomation verwendet kabelgebundene und kabellose Netzwerke, die zur Steuerung von Licht, Klima, Sicherheit, Audio/Visual, Überwachung usw. verwendet werden können, die alle eingebettete Geräte zum Erfassen und Steuern verwenden.

Transportsysteme vom Flug bis zum Auto verwenden zunehmend eingebettete Systeme. Neue Flugzeuge enthalten fortschrittliche Avionik wie Trägheitsleitsysteme und GPS-Empfänger, die auch erhebliche Sicherheitsanforderungen haben. Verschiedene Elektromotoren – bürstenlose Gleichstrommotoren , Induktionsmotoren und Gleichstrommotoren – verwenden elektronische Motorsteuerungen . Automobile , Elektrofahrzeuge und Hybridfahrzeuge verwenden zunehmend eingebettete Systeme, um die Effizienz zu maximieren und die Umweltverschmutzung zu reduzieren. Andere Automobilsicherheitssysteme, die eingebettete Systeme verwenden, umfassen Antiblockiersystem (ABS), Elektronische Stabilitätskontrolle (ESC/ESP), Traktionskontrolle (TCS) und automatischer Allradantrieb .

Medizinische Geräte verwenden eingebettete Systeme zur Überwachung und verschiedene medizinische Bildgebung ( PET , SPECT , CT und MRI ) für nicht-invasive interne Inspektionen. Eingebettete Systeme in medizinischen Geräten werden oft von Industriecomputern betrieben.

Für sicherheitskritische Systeme werden eingebettete Systeme verwendet . Sofern keine Verbindung zu kabelgebundenen oder drahtlosen Netzwerken über On-Chip-3G-Mobilfunk oder andere Methoden für IoT-Überwachungs- und Kontrollzwecke besteht, können diese Systeme vor Hackern isoliert und somit sicherer sein. Aus Brandschutzgründen können die Systeme so ausgelegt werden, dass sie höheren Temperaturen besser standhalten und weiterbetrieben werden können. Im Umgang mit Sicherheit können die eingebetteten Systeme autark sein und mit abgeschnittenen Elektro- und Kommunikationssystemen umgehen.

Miniatur-Wireless-Geräte, sogenannte Motes, sind vernetzte drahtlose Sensoren. Die drahtlose Sensorvernetzung nutzt die Miniaturisierung, die durch das fortschrittliche IC-Design ermöglicht wird, um vollständige drahtlose Subsysteme mit hochentwickelten Sensoren zu koppeln, sodass Menschen und Unternehmen eine Vielzahl von Dingen in der physischen Welt messen und auf diese Informationen durch Überwachungs- und Steuerungssysteme reagieren können. Diese Partikel sind vollständig in sich geschlossen und werden normalerweise jahrelang von einer Batteriequelle abgeführt, bevor die Batterien ausgetauscht oder geladen werden müssen.

Eigenschaften

Eingebettete Systeme sind darauf ausgelegt, eine bestimmte Aufgabe zu erfüllen, anstatt ein Allzweckcomputer für mehrere Aufgaben zu sein. Einige haben auch Echtzeit- Leistungsbeschränkungen, die aus Gründen wie Sicherheit und Benutzerfreundlichkeit erfüllt werden müssen; andere können geringe oder keine Leistungsanforderungen haben, wodurch die Systemhardware vereinfacht werden kann, um die Kosten zu senken.

Eingebettete Systeme sind nicht immer eigenständige Geräte. Viele eingebettete Systeme bestehen aus kleinen Teilen in einem größeren Gerät, das einem allgemeineren Zweck dient. Zum Beispiel verfügt die Gibson Robot Guitar über ein eingebettetes System zum Stimmen der Saiten, aber der Hauptzweck der Robot Guitar besteht natürlich darin, Musik zu spielen. In ähnlicher Weise stellt ein eingebettetes System in einem Automobil eine spezifische Funktion als Subsystem des Autos selbst bereit.

e-con Systems eSOM270 & eSOM300 Computer auf Modulen

Die für eingebettete Systeme geschriebenen Programmanweisungen werden als Firmware bezeichnet und in Festspeicher- oder Flash-Speicherchips gespeichert . Sie laufen mit begrenzten Computerhardwareressourcen: wenig Speicher, kleine oder nicht vorhandene Tastatur oder Bildschirm.

Benutzeroberflächen

Embedded System Text Benutzeroberfläche MicroVGA mit

Eingebettete Systeme reichen von überhaupt keiner Benutzeroberfläche , in Systemen, die nur einer Aufgabe gewidmet sind, bis hin zu komplexen grafischen Benutzeroberflächen , die modernen Computer-Desktop-Betriebssystemen ähneln. Einfache eingebettete Geräte verwenden Tasten , LEDs , Grafik- oder Zeichen- LCDs ( z. B. HD44780 LCD ) mit einem einfachen Menüsystem . Ausgefeiltere Geräte , die eine grafische Bildschirm mit verwenden berührungsempfindlichen oder Bildschirm-Rand Softkeys Flexibilität bieten und gleichzeitig Raum verwendet zu minimieren: Die Bedeutung der Tasten mit dem Bildschirm ändern können, und Auswahl das natürliche Verhalten des Zeigens auf das, was beinhaltet erwünscht ist.

Einige Systeme stellen Benutzerschnittstellen aus der Ferne mit Hilfe einer seriellen (zB RS-232 ) oder Netzwerk- (zB Ethernet ) Verbindung bereit . Dieser Ansatz erweitert die Fähigkeiten des eingebetteten Systems, vermeidet die Kosten für ein Display, vereinfacht BSP und ermöglicht es Designern, eine umfangreiche Benutzeroberfläche auf dem PC zu erstellen. Ein gutes Beispiel hierfür ist die Kombination eines eingebetteten HTTP-Servers , der auf einem eingebetteten Gerät (wie einer IP-Kamera oder einem Netzwerkrouter ) ausgeführt wird. Die Benutzeroberfläche wird in einem Webbrowser auf einem mit dem Gerät verbundenen PC angezeigt.

Prozessoren in eingebetteten Systemen

Beispiele für Eigenschaften typischer Embedded-Computer im Vergleich zu Allzweck-Gegenstücken sind geringer Stromverbrauch, geringe Größe, robuste Betriebsbereiche und niedrige Stückkosten. Dies hat den Preis begrenzter Verarbeitungsressourcen.

Für den Einsatz in eingebetteten Systemen wurden zahlreiche Mikrocontroller entwickelt. Allzweck-Mikroprozessoren werden auch in eingebetteten Systemen verwendet, erfordern jedoch im Allgemeinen mehr Unterstützungsschaltkreise als Mikrocontroller.

Fertige Computerplatinen

PC/104 und PC/104+ sind Beispiele für Standards für vorgefertigte Computerplatinen für kleine, kleinvolumige eingebettete und robuste Systeme. Diese sind meistens x86-basiert und im Vergleich zu einem Standard-PC oft physisch klein, obwohl sie im Vergleich zu den meisten einfachen (8/16-Bit) Embedded-Systemen immer noch recht groß sind. Sie können DOS , Linux , NetBSD oder ein eingebettetes Echtzeit-Betriebssystem wie MicroC/OS-II , QNX oder VxWorks verwenden .

Bei bestimmten Anwendungen, bei denen geringe Größe oder Energieeffizienz nicht im Vordergrund stehen, können die verwendeten Komponenten mit denen kompatibel sein, die in Allzweck-x86-Personalcomputern verwendet werden. Boards wie die VIA EPIA- Reihe helfen dabei, diese Lücke zu schließen, indem sie PC-kompatibel, aber hochintegriert, physisch kleiner oder andere Eigenschaften haben, die sie für Embedded-Ingenieure attraktiv machen. Der Vorteil dieses Ansatzes besteht darin, dass kostengünstige Standardkomponenten zusammen mit denselben Softwareentwicklungswerkzeugen verwendet werden können, die für die allgemeine Softwareentwicklung verwendet werden. Auf diese Weise aufgebaute Systeme gelten nach wie vor als eingebettet, da sie in größere Geräte integriert sind und eine einzige Rolle erfüllen. Beispiele für Geräte, die diesen Ansatz übernehmen können, sind Geldautomaten und Spielautomaten , die anwendungsspezifischen Code enthalten.

Die meisten vorgefertigten Embedded-System-Boards sind jedoch nicht PC-zentriert und verwenden nicht die ISA- oder PCI-Busse. Wenn ein System-on-a-Chip- Prozessor beteiligt ist, kann ein standardisierter Bus, der diskrete Komponenten verbindet, wenig Vorteile bringen, und die Umgebung sowohl für Hardware- als auch für Software-Tools kann sehr unterschiedlich sein.

Ein üblicher Designstil verwendet ein kleines Systemmodul, vielleicht die Größe einer Visitenkarte, das hochdichte BGA- Chips wie einen ARM- basierten System-on-a-Chip- Prozessor und Peripheriegeräte, externen Flash-Speicher für die Speicherung und DRAM für die Laufzeit enthält Erinnerung. Der Modulhersteller stellt normalerweise Boot-Software zur Verfügung und stellt sicher, dass eine Auswahl an Betriebssystemen vorhanden ist, normalerweise einschließlich Linux und einige Echtzeitoptionen. Diese Module können in großen Stückzahlen von Organisationen hergestellt werden, die mit ihren speziellen Testproblemen vertraut sind, und mit kundenspezifischen Mainboards mit viel geringeren Stückzahlen mit anwendungsspezifischen externen Peripheriegeräten kombiniert werden. Prominente Beispiele für diesen Ansatz sind Arduino und Raspberry Pi .

ASIC- und FPGA-SoC-Lösungen

Ein gängiges Array für sehr großvolumige eingebettete Systeme wie Mobiltelefone und Smartphones , aber auch für (nicht so großvolumige) eingebettete Systeme mit besonderen Anforderungen an Signalverarbeitungsleistung, Schnittstellen und Zuverlässigkeit, wie in der Avionik, ist das System auf einem Chip (SoC). Ein SoC enthält ein komplettes System – bestehend aus mehreren Prozessoren, Multiplikatoren, Caches, sogar verschiedenen Speichertypen und üblicherweise verschiedenen Peripheriegeräten wie Schnittstellen für die kabelgebundene oder drahtlose Kommunikation auf einem einzigen Chip. Häufig sind solche Chips in Grafikprozessoren (GPU) und digitalen Signalprozessoren (DSP) enthalten. SoCs können als anwendungsspezifischer integrierter Schaltkreis (ASIC) oder unter Verwendung eines feldprogrammierbaren Gate-Arrays (FPGA) implementiert werden, das typischerweise umkonfiguriert werden kann.

Peripheriegeräte

Eine Nahaufnahme des SMSC LAN91C110 (SMSC 91x)-Chips, eines eingebetteten Ethernet- Chips

Eingebettete Systeme kommunizieren über Peripheriegeräte mit der Außenwelt , wie zum Beispiel:

Werkzeuge

Wie bei anderer Software verwenden Entwickler von eingebetteten Systemen Compiler , Assembler und Debugger , um eingebettete Systemsoftware zu entwickeln. Sie können jedoch auch einige spezifischere Tools verwenden:

  • In Schaltungsdebuggern oder Emulatoren (siehe nächster Abschnitt).
  • Dienstprogramme zum Hinzufügen einer Prüfsumme oder eines CRC zu einem Programm, damit das eingebettete System prüfen kann, ob das Programm gültig ist.
  • Bei Systemen mit digitaler Signalverarbeitung können Entwickler eine mathematische Werkbank verwenden, um die Mathematik zu simulieren.
  • Modellierungs- und Simulationswerkzeuge auf Systemebene helfen Designern, Simulationsmodelle eines Systems mit Hardwarekomponenten wie Prozessoren , Speichern , DMA , Schnittstellen , Bussen und Software-Verhaltensfluss als Zustandsdiagramm oder Flussdiagramm unter Verwendung konfigurierbarer Bibliotheksblöcke zu erstellen. Zur Auswahl der richtigen Komponenten wird eine Simulation durchgeführt, indem ein Kompromiss zwischen Leistung und Leistung, Zuverlässigkeitsanalyse und Engpassanalyse durchgeführt wird. Typische Berichte, die einem Designer helfen, Architekturentscheidungen zu treffen, umfassen die Anwendungslatenz, den Gerätedurchsatz, die Geräteauslastung, den Stromverbrauch des gesamten Systems sowie den Stromverbrauch auf Geräteebene.
  • Ein modellbasiertes Entwicklungstool erstellt und simuliert grafische Datenfluss- und UML-Zustandsdiagramme von Komponenten wie digitalen Filtern, Motorcontrollern, Kommunikationsprotokolldecodierung und Multi-Rate-Aufgaben.
  • Benutzerdefinierte Compiler und Linker können verwendet werden, um spezialisierte Hardware zu optimieren.
  • Ein eingebettetes System kann eine eigene spezielle Sprache oder ein eigenes Design-Tool haben oder Erweiterungen zu einer bestehenden Sprache wie Forth oder Basic hinzufügen .
  • Eine andere Alternative ist das Hinzufügen eines Echtzeitbetriebssystems oder eingebetteten Betriebssystems
  • Modellierungs- und Codegenerierungswerkzeuge , die oft auf Zustandsautomaten basieren

Softwaretools können aus mehreren Quellen stammen:

  • Softwareunternehmen, die sich auf den Embedded-Markt spezialisiert haben
  • Von den GNU- Softwareentwicklungstools portiert
  • Manchmal können Entwicklungstools für einen PC verwendet werden, wenn der eingebettete Prozessor ein enger Verwandter eines gewöhnlichen PC-Prozessors ist

Mit zunehmender Komplexität eingebetteter Systeme wandern übergeordnete Tools und Betriebssysteme in Maschinen, wo es sinnvoll ist. Zum Beispiel benötigen Mobiltelefone , persönliche digitale Assistenten und andere Verbrauchercomputer häufig bedeutende Software, die von einer anderen Person als dem Hersteller der Elektronik gekauft oder bereitgestellt wird. In diesen Systemen ist eine offene Programmierumgebung wie Linux , NetBSD , OSGi oder Embedded Java erforderlich, damit der Software-Drittanbieter an einen großen Markt verkaufen kann.

Eingebettete Systeme finden sich häufig in Verbraucher-, Koch-, Industrie-, Automobil- und Medizinanwendungen. Einige Beispiele für eingebettete Systeme sind MP3-Player, Mobiltelefone, Videospielkonsolen, Digitalkameras, DVD-Player und GPS. Haushaltsgeräte wie Mikrowellenherde, Waschmaschinen und Geschirrspüler enthalten eingebettete Systeme, um Flexibilität und Effizienz zu bieten.

Debuggen

Eingebettetes Debugging kann je nach den verfügbaren Einrichtungen auf unterschiedlichen Ebenen durchgeführt werden. Die verschiedenen Metriken, die die verschiedenen Formen des eingebetteten Debuggens charakterisieren, sind: verlangsamt es die Hauptanwendung, wie nah ist das debuggte System oder die debuggte Anwendung am tatsächlichen System oder der tatsächlichen Anwendung, wie aussagekräftig sind die Trigger, die für das Debugging gesetzt werden können (z. Inspizieren des Speichers, wenn ein bestimmter Programmzählerwert erreicht wird) und was im Debugging-Prozess untersucht werden kann (wie etwa nur Speicher oder Speicher und Register usw.).

Von den einfachsten bis zu den anspruchsvollsten lassen sie sich grob in die folgenden Bereiche einteilen:

  • Interaktives residentes Debugging unter Verwendung der einfachen Shell des eingebetteten Betriebssystems (z. B. Forth und Basic)
  • Externes Debugging mit Logging oder serieller Portausgabe, um den Betrieb entweder mit einem Monitor im Flash oder mit einem Debug-Server wie dem Remedy Debugger zu verfolgen , der sogar für heterogene Multicore- Systeme funktioniert.
  • Ein In-Circuit-Debugger (ICD), ein Hardwaregerät, das über eine JTAG- oder Nexus- Schnittstelle mit dem Mikroprozessor verbunden ist . Dadurch kann der Betrieb des Mikroprozessors extern gesteuert werden, ist jedoch typischerweise auf spezifische Debugging-Fähigkeiten des Prozessors beschränkt.
  • Ein In-Circuit-Emulator (ICE) ersetzt den Mikroprozessor durch ein simuliertes Äquivalent und bietet volle Kontrolle über alle Aspekte des Mikroprozessors.
  • Ein vollständiger Emulator bietet eine Simulation aller Aspekte der Hardware, ermöglicht die Steuerung und Modifikation sowie das Debuggen auf einem normalen PC. Die Nachteile sind Kosten und langsamer Betrieb, in einigen Fällen bis zu 100-mal langsamer als das endgültige System.
  • Für SoC-Designs besteht der typische Ansatz darin, das Design auf einer FPGA-Prototypplatine zu überprüfen und zu debuggen. Tools wie Certus werden verwendet, um Sonden in das FPGA-RTL einzufügen, die Signale für die Beobachtung zur Verfügung stellen. Dies wird verwendet, um Hardware-, Firmware- und Software-Interaktionen über mehrere FPGAs hinweg zu debuggen, mit Funktionen, die denen eines Logikanalysators ähneln.
  • Reine Software-Debugger haben den Vorteil, dass sie keine Hardware-Änderungen benötigen, sondern sorgfältig kontrollieren müssen, was sie aufzeichnen, um Zeit und Speicherplatz zu sparen.

Sofern er nicht auf externes Debugging beschränkt ist, kann der Programmierer normalerweise Software über die Tools laden und ausführen, den im Prozessor ausgeführten Code anzeigen und seinen Betrieb starten oder stoppen. Die Ansicht des Codes kann als HLL -Quellcode , Assemblercode oder eine Mischung aus beidem erfolgen.

Da ein eingebettetes System oft aus einer Vielzahl von Elementen besteht, kann die Debugging-Strategie variieren. Beispielsweise unterscheidet sich das Debuggen eines software- (und mikroprozessor-)zentrierten eingebetteten Systems vom Debuggen eines eingebetteten Systems, bei dem der Großteil der Verarbeitung von Peripheriegeräten (DSP, FPGA und Co-Prozessor) ausgeführt wird. Immer mehr eingebettete Systeme verwenden heute mehr als einen einzigen Prozessorkern. Ein häufiges Problem bei der Multi-Core-Entwicklung ist die richtige Synchronisierung der Softwareausführung. In diesem Fall möchte das eingebettete Systemdesign möglicherweise den Datenverkehr auf den Bussen zwischen den Prozessorkernen überprüfen, was ein Debugging auf sehr niedriger Ebene erfordert, beispielsweise auf Signal-/Busebene, mit einem Logikanalysator .

Verfolgung

Echtzeit-Betriebssysteme ( RTOS ) unterstützen häufig die Verfolgung von Betriebssystemereignissen. Eine grafische Ansicht wird von einem Host-PC-Tool basierend auf einer Aufzeichnung des Systemverhaltens präsentiert. Die Trace-Aufzeichnung kann in Software, durch das RTOS oder durch spezielle Tracing-Hardware erfolgen. Die RTOS-Ablaufverfolgung ermöglicht es Entwicklern, Timing- und Leistungsprobleme des Softwaresystems zu verstehen, und gibt ein gutes Verständnis für das Systemverhalten auf hoher Ebene.

Zuverlässigkeit

Eingebettete Systeme befinden sich oft in Maschinen, von denen erwartet wird, dass sie jahrelang ohne Fehler laufen und sich in einigen Fällen von selbst erholen, wenn ein Fehler auftritt. Daher wird die Software normalerweise sorgfältiger entwickelt und getestet als die für Personalcomputer, und unzuverlässige mechanisch bewegliche Teile wie Laufwerke, Schalter oder Tasten werden vermieden.

Spezifische Zuverlässigkeitsprobleme können sein:

  • Das System kann zur Reparatur nicht sicher heruntergefahren werden oder es ist zu unzugänglich für eine Reparatur. Beispiele umfassen Weltraumsysteme, Unterwasserkabel, Navigationsbaken, Bohrlochsysteme und Autos.
  • Das System muss aus Sicherheitsgründen am Laufen gehalten werden. "Limp-Modi" sind weniger erträglich. Oft werden Backups von einem Operator ausgewählt. Beispiele sind Flugzeugnavigation, Reaktorsteuerungssysteme, sicherheitskritische chemische Fabrikkontrollen, Zugsignale.
  • Das System verliert beim Herunterfahren viel Geld: Telefonschalter, Fabriksteuerungen, Brücken- und Aufzugssteuerungen, Geldtransfer und Market Making, automatisierter Verkauf und Service.

Eine Vielzahl von Techniken wird verwendet, manchmal in Kombination, um Fehler zu beheben – sowohl Softwarefehler wie Speicherlecks als auch weiche Fehler in der Hardware:

  • Watchdog-Timer , der den Computer zurücksetzt, es sei denn, die Software benachrichtigt die Watchdog-Subsysteme regelmäßig mit redundanten Ersatzlaufwerken, die in Software-"Limp-Modi" umgeschaltet werden können, die eine Teilfunktion bieten
  • Das Entwerfen mit einer Trusted Computing Base (TCB)-Architektur gewährleistet eine hochsichere und zuverlässige Systemumgebung
  • Ein für eingebettete Systeme konzipierter Hypervisor ist in der Lage, eine sichere Kapselung für jede Subsystemkomponente bereitzustellen, so dass eine kompromittierte Softwarekomponente nicht mit anderen Subsystemen oder Systemsoftware auf privilegierter Ebene interferieren kann. Diese Kapselung verhindert, dass sich Fehler von einem Subsystem zu einem anderen ausbreiten, wodurch die Zuverlässigkeit verbessert wird. Dies kann auch ermöglichen, dass ein Subsystem bei einer Fehlererkennung automatisch heruntergefahren und neu gestartet wird.
  • Immunitätsbewusste Programmierung

Hohe vs. niedrige Lautstärke

Bei hochvolumigen Systemen wie tragbaren Musikplayern oder Mobiltelefonen ist die Kostenminimierung normalerweise die primäre Designüberlegung. Ingenieure wählen in der Regel Hardware aus, die gerade „gut genug“ ist, um die erforderlichen Funktionen zu implementieren.

Für eingebettete Systeme mit geringem Volumen oder Prototypen können Universalcomputer angepasst werden, indem die Programme eingeschränkt werden oder das Betriebssystem durch ein Echtzeitbetriebssystem ersetzt wird .

Eingebettete Softwarearchitekturen

1978 veröffentlichte die National Electrical Manufacturers Association einen Standard für programmierbare Mikrocontroller, der fast alle computerbasierten Controller wie Einplatinencomputer, numerische und ereignisbasierte Controller umfasst.

Heutzutage werden mehrere verschiedene Arten von Softwarearchitekturen verwendet.

Einfacher Regelkreis

In diesem Design hat die Software einfach eine Schleife . Die Schleife ruft Unterprogramme auf , die jeweils einen Teil der Hardware oder Software verwalten. Daher wird es als einfacher Regelkreis oder Regelkreis bezeichnet.

Interrupt-gesteuertes System

Einige eingebettete Systeme werden überwiegend durch Interrupts gesteuert . Dies bedeutet, dass vom System ausgeführte Aufgaben durch verschiedene Arten von Ereignissen ausgelöst werden; ein Interrupt könnte beispielsweise durch einen Timer in einer vordefinierten Frequenz oder durch einen seriellen Port-Controller erzeugt werden, der ein Byte empfängt.

Diese Arten von Systemen werden verwendet, wenn Event-Handler eine geringe Latenz benötigen und die Event-Handler kurz und einfach sind. Normalerweise führen diese Arten von Systemen auch eine einfache Aufgabe in einer Hauptschleife aus, aber diese Aufgabe reagiert nicht sehr empfindlich auf unerwartete Verzögerungen.

Manchmal fügt der Interrupt-Handler längere Aufgaben zu einer Warteschlangenstruktur hinzu. Später, nachdem der Interrupt-Handler beendet ist, werden diese Aufgaben von der Hauptschleife ausgeführt. Diese Methode bringt das System in die Nähe eines Multitasking-Kernels mit diskreten Prozessen.

Kooperatives Multitasking

Ein nicht-präemptives Multitasking-System ist dem einfachen Regelkreisschema sehr ähnlich, außer dass die Schleife in einer API versteckt ist . Der Programmierer definiert eine Reihe von Aufgaben, und jede Aufgabe erhält ihre eigene Umgebung zum „Ausführen“. Wenn eine Aufgabe im Leerlauf ist, ruft sie eine Leerlaufroutine auf, die normalerweise als „Pause“, „Warten“, „Ausgeben“, „Nop“ bezeichnet wird. (steht für keine Bedienung ), usw.

Die Vor- und Nachteile sind denen des Regelkreises ähnlich, außer dass das Hinzufügen neuer Software einfacher ist, indem einfach eine neue Aufgabe geschrieben oder der Warteschlange hinzugefügt wird.

Präemptives Multitasking oder Multithreading

Bei dieser Art von System wechselt ein Low-Level-Codestück zwischen Tasks oder Threads basierend auf einem Timer (verbunden mit einem Interrupt). Auf dieser Ebene wird allgemein davon ausgegangen, dass das System einen "Betriebssystem"-Kernel hat. Je nachdem, wie viel Funktionalität benötigt wird, führt es mehr oder weniger in die Komplexität der Verwaltung mehrerer konzeptionell parallel ausgeführter Aufgaben ein.

Wie jeder Code möglicherweise die Daten einer anderen Aufgabe beschädigen kann ( mit Ausnahme eines in größeren Systemen mit MMU ) Programmen sorgfältig entworfen werden muß und getestet und auf gemeinsame Daten zugreifen muß durch eine Synchronisationsstrategie, wie gesteuert werden Nachrichtenwarteschlangen , Semaphore oder nicht -Blockierung des Synchronisationsschemas .

Aufgrund dieser Komplexität ist es für Unternehmen üblich, ein Echtzeitbetriebssystem (RTOS) zu verwenden, das es den Anwendungsprogrammierern ermöglicht, sich auf die Gerätefunktionalität statt auf die Betriebssystemdienste zu konzentrieren, zumindest bei großen Systemen; kleinere Systeme können sich den Overhead, der mit einem generischen Echtzeitsystem verbunden ist, aufgrund von Einschränkungen in Bezug auf Speichergröße, Leistung oder Batterielebensdauer oft nicht leisten . Die Auswahl, dass ein RTOS erforderlich ist, bringt jedoch ihre eigenen Probleme mit sich, da die Auswahl vor Beginn des Anwendungsentwicklungsprozesses getroffen werden muss. Dieses Timing zwingt Entwickler dazu, das eingebettete Betriebssystem für ihr Gerät basierend auf den aktuellen Anforderungen auszuwählen und schränkt damit zukünftige Optionen stark ein. Die Beschränkung zukünftiger Optionen wird mit abnehmender Produktlebensdauer immer problematischer. Darüber hinaus nimmt der Komplexitätsgrad ständig zu, da Geräte zur Verwaltung von Variablen wie seriell, USB, TCP/IP, Bluetooth , Wireless LAN , Amtsfunk, mehreren Kanälen, Daten und Sprache, verbesserten Grafiken, mehreren Zuständen, mehreren Threads, zahlreiche Wartezustände und so weiter. Diese Trends führen zur Einführung von eingebetteter Middleware zusätzlich zu einem Echtzeit-Betriebssystem.

Mikrokernel und Exokernel

Ein Mikrokernel ist ein logischer Schritt nach oben von einem Echtzeit-Betriebssystem. Die übliche Anordnung ist, dass der Kernel des Betriebssystems Speicher zuweist und die CPU auf verschiedene Ausführungs-Threads umschaltet. Prozesse im Benutzermodus implementieren wichtige Funktionen wie Dateisysteme, Netzwerkschnittstellen usw.

Im Allgemeinen sind Mikrokernel erfolgreich, wenn Taskwechsel und Intertask-Kommunikation schnell sind, und versagen, wenn sie langsam sind.

Exokernel kommunizieren effizient durch normale Subroutinenaufrufe. Die Hardware und die gesamte Software im System sind für Anwendungsprogrammierer verfügbar und erweiterbar.

Monolithische Kerne

In diesem Fall wird ein relativ großer Kernel mit ausgeklügelten Fähigkeiten an eine eingebettete Umgebung angepasst. Dies gibt Programmierern eine Umgebung ähnlich einem Desktop-Betriebssystem wie Linux oder Microsoft Windows und ist daher für die Entwicklung sehr produktiv; auf der anderen Seite erfordert es erheblich mehr Hardwareressourcen, ist oft teurer und kann aufgrund der Komplexität dieser Kernel weniger vorhersehbar und zuverlässig sein.

Gängige Beispiele für eingebettete monolithische Kernel sind eingebettetes Linux , VXWorks und Windows CE .

Trotz der gestiegenen Hardwarekosten wird diese Art von eingebetteten Systemen immer beliebter, insbesondere bei leistungsstärkeren eingebetteten Geräten wie drahtlosen Routern und GPS-Navigationssystemen . Hier sind einige der Gründe:

  • Ports zu gängigen Embedded-Chipsätzen sind verfügbar.
  • Sie ermöglichen die Wiederverwendung von öffentlich verfügbarem Code für Gerätetreiber , Webserver , Firewalls und anderen Code.
  • Entwicklungssysteme können mit einem breiten Funktionsumfang beginnen, und dann kann die Verteilung so konfiguriert werden, dass nicht benötigte Funktionen ausgeschlossen werden und die Kosten für den Speicher, den sie verbrauchen würden, eingespart werden.
  • Viele Ingenieure glauben, dass das Ausführen von Anwendungscode im Benutzermodus zuverlässiger und einfacher zu debuggen ist, wodurch der Entwicklungsprozess einfacher und der Code tragbarer wird.
  • Funktionen, die eine schnellere Reaktion erfordern, als garantiert werden kann, können oft in Hardware platziert werden .

Zusätzliche Softwarekomponenten

Neben dem Kernbetriebssystem verfügen viele eingebettete Systeme über zusätzliche Softwarekomponenten der oberen Schicht. Diese Komponenten bestehen aus Netzwerkprotokollstacks wie CAN , TCP/IP , FTP , HTTP und HTTPS und enthalten auch Speicherfunktionen wie FAT und Flash-Speicherverwaltungssysteme. Wenn das eingebettete Gerät über Audio- und Videofunktionen verfügt, sind die entsprechenden Treiber und Codecs im System vorhanden. Im Fall der monolithischen Kernel sind viele dieser Softwareschichten enthalten. In der Kategorie RTOS hängt die Verfügbarkeit der zusätzlichen Softwarekomponenten vom kommerziellen Angebot ab.

Domänenspezifische Architekturen

Im Automobilbereich ist AUTOSAR eine Standardarchitektur für eingebettete Software.

Siehe auch

Anmerkungen

  1. ^ Weitere Informationen zu MicroVGA finden Sie in diesem PDF .

Verweise

Weiterlesen

  • John Catsoulis (Mai 2005). Entwerfen von Embedded-Hardware, 2. Auflage . O'Reilly. ISBN 0-596-00755-8.
  • James M. Conrad; Alexander G. Dean (September 2011). Embedded Systems, eine Einführung mit dem Renesas RX62N Mikrocontroller . Mikro. ISBN 978-1935-7729-96.
  • Klaus Elk (August 2016). Entwicklung eingebetteter Software für das Internet der Dinge, Grundlagen, Technologien und Best Practices . ISBN 978-1534602533.

Externe Links