Embedded Software ist ganz anders.
In einer Desktop-App sparen Sie durch Abstraktionen und Bibliotheken viel Entwicklungszeit. Sie haben den Luxus, ein paar Megabyte oder Gigabyte RAM oder einige 64-Bit-CPU-Kerne mit 2 + GHz auszugeben, und jemand anderes (Benutzer) bezahlt für diese Hardware. Möglicherweise wissen Sie nicht, auf welchen Systemen die App ausgeführt wird.
In einem eingebetteten Projekt sind die Ressourcen oft sehr begrenzt. In einem Projekt, an dem ich gearbeitet habe (Prozessoren der PIC 17X-Serie), verfügte die Hardware über 2 KB Programmspeicher, 8 Ebenen (in-Hardware) Stack und 192 Byte (<0,2 KB) RAM. Unterschiedliche E / A-Pins hatten unterschiedliche Funktionen, und Sie haben die Hardware nach Bedarf konfiguriert, indem Sie in Hardwareregister geschrieben haben. Das Debuggen umfasst ein Oszilloskop und einen Logikanalysator.
In eingebetteten Umgebungen stören Abstraktionen häufig und verwalten (und kosten) Ressourcen, die Sie nicht haben. ZB haben die meisten eingebetteten Systeme kein Dateisystem. Mikrowellenherde sind eingebettete Systeme. Kfz-Motorsteuerungen. Einige elektrische Zahnbürsten. Einige Kopfhörer mit Geräuschunterdrückung.
Ein sehr wichtiger Faktor für mich bei der Entwicklung eingebetteter Systeme ist die Kenntnis und Kontrolle darüber, in was der Code in Bezug auf Anweisungen, Ressourcen, Speicher und Ausführungszeit übersetzt wird. Oft steuert die genaue Reihenfolge der Anweisungen z. B. das Timing für die Wellenformen der Hardwareschnittstelle.
Abstraktionen und "Magie" hinter den Kulissen (z. B. ein Müllsammler) eignen sich hervorragend für Desktop-Apps. Garbage-Collectors ersparen Ihnen viel Zeit bei der Suche nach Speicherlecks, wenn Speicher dynamisch zugewiesen wird / werden kann.
In der Echtzeit-Embedded-Welt müssen wir jedoch wissen und steuern, wie lange die Dinge dauern, manchmal bis zu Nanosekunden, und können kein weiteres paar Megabyte RAM oder eine schnellere CPU für ein Problem ausgeben. Ein einfaches Beispiel: Beim Software-Dimmen von LEDs durch Steuern des Arbeitszyklus (die CPU hatte nur die Ein- / Aus-Steuerung der LEDs) ist es NICHT in Ordnung, dass der Prozessor ausgeht und z. B. eine Speicherbereinigung für 100 ms durchführt, da die Anzeige sichtbar wäre Blitz hell oder erlöschen.
Ein hypothetischeres Beispiel ist eine Motorsteuerung, die Zündkerzen direkt zündet. Wenn diese CPU abschaltet und 50 ms lang Müll sammelt, wird der Motor für einen Moment ausgeschaltet oder an der falschen Kurbelwellenposition gezündet, wodurch der Motor möglicherweise abgewürgt wird (während er vorbeifährt?) Oder mechanisch beschädigt wird. Sie könnten jemanden töten lassen.