'Embedded' ist eine Art geladener Begriff.
In mancher Hinsicht kann jedes System, das für die Ausführung einer einzelnen Anwendung vorgesehen ist, als eingebettetes System bezeichnet werden, sofern bestimmte Hardwarekomponenten gesteuert werden müssen. Sie können einen 400-MHz-PPC604 mit 2 GB RAM, auf dem eine Java-Anwendung über Linux ausgeführt wird, als eingebettetes System bezeichnen, wenn er einen Prozess über lokale E / A-Module steuert. Auf der anderen Seite wäre ein Arduino, auf dem nur eine minimale Netzwerkanwendung ausgeführt wird, kein eingebettetes System. Aber wahrscheinlich lässt "eingebettet" die meisten Leute an Flash-basierte Controller mit nur ein paar hundert Bytes RAM, keinem nennenswerten Betriebssystem und einer Vielzahl von On-Chip-Peripheriegeräten denken.
Davon abgesehen sind die beiden größten Hürden, denen sich nicht-eingebettete Programmierer beim Lernen von eingebetteten Systemen gegenübersehen, wahrscheinlich E / A-Register und Interrupts.
Interrupts sind für nicht eingebettete Programmierer unter Umständen das einfachere Konzept, da die Hauptprobleme bei der parallelen und ereignisgesteuerten Programmierung häufig in Mainstream-Anwendungen auftreten. Was Interrupts zu einem Schmerz macht, ist die Erkenntnis, dass ein System extrem empfindlich auf die Qualität seiner Interrupt-Behandlung reagiert und dass es kompliziert ist, mit Hardware umzugehen, um den Interrupt-Zustand zu beseitigen und sich auf den nächsten einzurichten. Mit einer GUI beendet ein Deadlock nur die Anwendung. Bei einem Interrupt-Handler führt ein Deadlock dazu, dass Ihr gesamtes System gesperrt wird.
E / A-Geräte scheinen der Bereich zu sein, der die meisten Schwierigkeiten verursacht. Für die Uneingeweihten kann es eine Überraschung sein, dass das Lesen dieses Registers hier Auswirkungen auf dieses Register dort hat . Schreiben von Einsen, um Bits zu löschen. Statusbits, die sich beim Lesen eines Datenregisters usw. von selbst löschen. Es gibt so viele Möglichkeiten mit E / A-Hardware, dass es keine allgemeine Regel für den Umgang damit gibt, außer zu lernen, wie man Gerätedatenblätter findet und interpretiert. Wenn Sie einen Gerätetreiber für eine serielle Schnittstelle schreiben, lernen Sie viel über die I / O-Programmierung auf niedriger Ebene.
Es gibt wirklich keinen Ersatz für das Erlernen dieser Dinge, als die Ärmel hochzukrempeln und ein direktes C und / oder eine Assemblersprache auf dem bloßen Metall zu programmieren. Sogar das oben erwähnte Java-basierte eingebettete System benötigt irgendwann einen Gerätetreiber für die E / A, und dies bedeutet letztendlich, dass man sich mit einigem C befasst. Erfahrung ist der beste Lehrer. Suchen Sie sich einen Mikrocontroller aus, seien es MSP430, TMS320, AVR, ARM, PIC, 68HC11, oder was auch immer, finden Sie ein Evaluierungskit und bauen Sie einige Systeme.