Vorwort
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Ich liebe eingebettete Systeme. Als sich das erste Mal ein Motor drehte, weil ich es ihm sagte, war ich süchtig. Ich habe mich schnell von der reinen Software wegbewegt und bin in einen Bereich gegangen, in dem ich die Welt berühren kann. Gerade als ich die Softwarebranche verließ, wurde die bahnbrechende Arbeit über Entwurfsmuster veröffentlicht.1 Mein Team ging das Buch durch, diskutierte die Muster und überlegte, wo wir sie einsetzen könnten.
Als ich mich mehr mit eingebetteten Systemen beschäftigte, stieß ich auf Compiler, die mit der C++-Vererbung nicht zurechtkamen, auf Prozessoren mit absurd kleinem Speicher, in denen die Muster implementiert werden konnten, und auf eine ganze Reihe neuer Probleme, bei denen Designmuster nicht anwendbar schienen. Aber ich habe die Idee nie vergessen, dass es Muster für die Art und Weise gibt, wie wir Technik betreiben. Wenn wir lernen, die Muster zu erkennen, können wir die robusten Lösungen immer wieder verwenden. Ein großer Teil dieses Buches befasst sich mit Standardmustern und bietet einige neue Muster für die Entwicklung eingebetteter Systeme. Außerdem habe ich eine Reihe von Kapiteln mit anderen nützlichen Informationen gefüllt, die in den meisten Büchern nicht zu finden sind.
Über dieses Buch
Nachdem ich eingebettete Systeme in medizinischen Geräten, Rennwagen, Flugzeugen und Kinderspielzeug gesehen habe, habe ich viele Gemeinsamkeiten entdeckt. Es gibt Dinge, die ich damals gerne gewusst hätte, wie man Software für eingebettete Systeme entwickelt und implementiert. Dieses Buch enthält einiges von dem, was ich gelernt habe. Es ist ein Buch über erfolgreiches Softwaredesign in ressourcenbeschränkten Umgebungen.
In diesem Buch geht es auch darum, zu verstehen, worauf Interviewer achten, wenn du dich für eine Stelle im Bereich Embedded Systems bewirbst. Jeder Abschnitt endet mit einer Interviewfrage. Diese sind in der Regel nicht sprachspezifisch; stattdessen versuchen sie herauszufinden, wie du denkst. Die nützlichsten Interviewfragen haben keine einzige richtige Antwort. Anstatt zu versuchen, alle Wege zu dokumentieren, geben die Anmerkungen nach jeder Frage Hinweise darauf, worauf ein Interviewer bei deiner Antwort achten könnte. Du musst den Job (und die Antworten) aufgrund deiner eigenen Leistungen bekommen.
Eine Anmerkung: Meine eingebetteten Systeme haben keine Betriebssysteme (OS). Die Software läuft auf dem bloßen Metall. Wenn die Software sagt: "Schalte das Licht ein", dann sagt sie das dem Prozessor, ohne dass ein Vermittler dazwischen steht. Dies ist kein Buch über die Arbeit mit einem eingebetteten Betriebssystem. Aber die Konzepte lassen sich auf Prozessoren mit Betriebssystemen übertragen. Wenn du also dabei bleibst, lernst du vielleicht auch die Hintergründe von Betriebssystemen kennen. Wenn du ohne ein Betriebssystem arbeitest, lernst du die Funktionen eines Betriebssystems erst richtig kennen.
Dieses Buch beschreibt die Archetypen und Prinzipien, die bei der Erstellung von Software für eingebettete Systeme üblicherweise verwendet werden. Ich gehe nicht auf eine bestimmte Plattform, einen Prozessor, einen Compiler oder eine Sprache ein, denn wenn du dir mit diesem Buch eine gute Grundlage verschaffst, kannst du später auf die Besonderheiten eingehen.
Für wen dieses Buch ist
Ich habe das für einige Leute geschrieben, mit denen ich in der Vergangenheit gearbeitet habe.
Sarah war eine junge Softwareentwicklerin, die in mein Team für eingebettete Systeme kam. Sie war intelligent und interessiert, wusste aber nicht, wie man mit Hardware umgeht.
Josh war ein erfahrener Elektromechanik-Ingenieur, der Software schreiben musste. Er konnte zwar einige Codes schreiben, kam aber bei der Entwicklung des Systems, der Fehlersuche bei Speicherproblemen und der Wiederverwendung von Code nicht weiter.
Normalerweise lernen wir in der Schule nur Software oder Hardware; wir lernen nicht, wie man sie zusammenarbeiten lässt. Mein Ziel ist es, das Wissen, das du hast, zu nutzen, um die Lücken zu füllen.
Über den Autor
Im Bereich der eingebetteten Systeme habe ich an DNA-Scannern, Trägheitsmessgeräten für Flugzeuge und Rennwagen, Spielzeug für Vorschulkinder, einem Schussortungssystem zur Ergreifung von Kriminellen und verschiedenen medizinischen, wissenschaftlichen und Verbrauchergeräten gearbeitet.
Ich habe mich auf Signalverarbeitung, Hardware-Integration, komplexes Systemdesign und Leistung spezialisiert. Da ich die Zertifizierungsprozesse der FAA und der FDA durchlaufen habe, weiß ich, wie wichtig es ist, qualitativ hochwertige Entwürfe zu erstellen und wie diese zu einer qualitativ hochwertigen Umsetzung führen.
Ich habe mehrere Jahre in Führungspositionen verbracht, aber ich liebe die praktische Arbeit als Ingenieur und den Nervenkitzel, hervorragende Produkte zu liefern. Ich freue mich, sagen zu können, dass ich nach meinem Ausscheiden aus dem Management weiterhin die Möglichkeit habe, als Führungskraft und Mentor zu arbeiten.
Nach der ersten Ausgabe dieses Buches habe ich den Embedded.fm-Podcast gestartet, um mit anderen Menschen über eingebettete Systeme zu sprechen. In Hunderten von Episoden habe ich gelernt, wie andere Ingenieure Probleme lösen, welche neuen Technologien entwickelt werden und welche anderen Karrierewege es gibt.
Aufbau dieses Buches
Ich lese Sachbücher zum Zeitvertreib. Ich lese viel mehr Belletristik als Sachbücher, aber trotzdem mag ich jedes gute Buch. Ich habe dieses Buch so geschrieben, dass es fast wie eine Geschichte gelesen werden kann, von der ersten bis zur letzten Seite. Die Informationen sind technisch (an manchen Stellen sogar extrem), aber die Darstellung ist locker. Du musst nicht mitprogrammieren, um den Stoff zu verstehen (obwohl das Ausprobieren der Beispiele und die Anwendung der Empfehlungen auf deinen Code dir ein tieferes Verständnis vermitteln werden).
Dies soll kein technisches Handbuch sein, bei dem du in die Mitte springen und nur das lesen kannst, was du willst. Ich meine, das kannst du tun, aber mit der Such- und Zerstörungsmethode verpasst du eine Menge an Informationen. Du wirst auch die Witze verpassen, und das ist das, was ich wirklich schade fände. Ich hoffe, dass du das Buch der Reihe nach durchgehst. Wenn du dann hüfttief in Alligatoren steckst und schnell eine Funktion implementieren musst, nimmst du das Buch zur Hand, schlägst das richtige Kapitel auf und zauberst wie ein Zauberer eine Befehlstabelle oder eine Festkomma-Implementierung der Varianz.
Oder du kannst herumspringen und über Lösungen für deine Krise der Woche lesen. Ich verstehe das. Manchmal muss man das Problem einfach lösen. Wenn das der Fall ist, hoffe ich, dass du das Kapitel interessant genug findest, um wiederzukommen, wenn du mit der Brandbekämpfung fertig bist.
Die Reihenfolge der Kapitel ist:
- Kapitel 1, "Einführung"
Dieses Kapitel beschreibt, was ein eingebettetes System ist und wie sich die Entwicklung von herkömmlicher Software unterscheidet.
- Kapitel 2, "Erstellen einer Systemarchitektur"
Egal, ob du versuchst, ein System zu verstehen oder eines von Grund auf neu zu erstellen, es gibt Tools, die dir dabei helfen.
- Kapitel 3, "Wie du die Hardware in die Hand nimmst"
Die Integration von Hardware und Software während der Inbetriebnahme des Boards kann beängstigend sein, aber es gibt einige Möglichkeiten, sie reibungsloser zu gestalten.
- Kapitel 4, "Eingänge, Ausgänge und Zeitgeber"
Die Version von "Hello World" für eingebettete Systeme ist es, eine LED blinken zu lassen. Das kann komplexer sein, als du vielleicht erwartest.
- Kapitel 5, "Unterbrechungen"
Interrupts sind eines der verwirrendsten Themen in eingebetteten Systemen: Code, der asynchron bei Ereignissen im Prozessor aufgerufen wird. Um dies zu vereinfachen, wird ein Huhn verwendet.
- Kapitel 6, "Management des Aktivitätsflusses"
Dieses Kapitel beschreibt, wie du die Hauptschleife deines Systems einrichtest, wo du Interrupts verwenden kannst (und wo nicht) und wie du einen Zustandsautomaten erstellst.
- Kapitel 7, "Kommunikation mit Peripheriegeräten"
Verschiedene serielle Kommunikationsmethoden regeln eingebettete Systeme: UART, SPI, I2C, USB, und so weiter. In diesem Kapitel geht es darum, was sie voneinander unterscheidet und wie man sie effizienter einsetzen kann.
- Kapitel 8, "Ein System zusammenstellen"
Gängige Peripheriegeräte wie LCDs, ADCs, Flash-Speicher und digitale Sensoren haben gemeinsame Implementierungsanforderungen wie Pufferhandling, Bandbreitenanforderungen und Pipelines.
- Kapitel 9, "In Schwierigkeiten geraten"
Debugging ist eine Fähigkeit, die jeder Entwickler braucht. Wenn du herausfindest, wie du Probleme verursachst, lernst du, wie du Bugs, Stack-Probleme, Hard-Faults und Cleverness lösen kannst.
- Kapitel 10, "Vernetzte Geräte bauen"
Egal, ob du IoT-Geräte für Verbraucher oder vernetzte Systeme für die Industrie hast, die Verwaltung vieler Geräte bedeutet, dass du dich mit Firmware-Updates, Sicherheit und der Überwachung des Zustands befassen musst.
- Kapitel 11, "Mit weniger mehr erreichen"
Optimierung ist nichts für schwache Nerven. In diesem Kapitel werden Methoden vorgestellt, mit denen du den Verbrauch von Arbeitsspeicher, Codeplatz und Prozessorzyklen reduzieren kannst.
- Kapitel 12, "Mathematik"
Die meisten eingebetteten Systeme müssen in irgendeiner Form Analysen durchführen. Wenn du verstehst, wie mathematische Operationen und Fließkommazahlen funktionieren (und wie sie nicht funktionieren), wird dein System schneller und robuster.
- Kapitel 13, "Senkung des Stromverbrauchs"
Von der Reduzierung der Prozessorzyklen bis hin zu Vorschlägen für die Systemarchitektur - dieses Kapitel hilft dir, wenn dein System mit Batterien läuft.
- Kapitel 14, "Motoren und Bewegung"
Dieses Kapitel ist eine grundlegende Einführung in Motoren und Bewegung. (Oder vielleicht die Einleitung für ein ganz neues Buch.)
Die Informationen sind in der Reihenfolge aufgeführt, in der ich möchte, dass meine Ingenieure anfangen, über diese Dinge nachzudenken. Es mag seltsam erscheinen, dass die Architektur an erster Stelle steht, wenn man bedenkt, dass die meisten Leute erst später in ihrer Karriere dazu kommen. Aber ich möchte, dass die Leute darüber nachdenken, wie ihr Code in das System passt, lange bevor sie sich um die Optimierung kümmern.
Terminologie
Ein Mikrocontroller ist ein Prozessor mit integriertem Arbeitsspeicher, Codespeicher (normalerweise Flash) und verschiedenen Peripherieschnittstellen (z. B. E/A-Leitungen). Dein Code läuft auf einem Prozessor, der sogenannten Central Processing Unit (CPU). Ein Mikroprozessor ist ein kleiner Prozessor, aber die Definition von "klein" variiert.
Ein DSP(Digitaler Signalprozessor) ist eine spezielle Form eines Mikrocontrollers, der sich auf die Signalverarbeitung konzentriert, indem er normalerweise analoge Signale abtastet und mit dem Ergebnis etwas Interessantes anstellt. Normalerweise ist ein DSP auch ein Mikrocontroller, aber er ist so optimiert, dass er mathematische Operationen schneller ausführen kann (vor allem Multiplikation und Addition).
Als ich dieses Buch schrieb, wollte ich die richtige Terminologie verwenden, damit du dich daran gewöhnst. Da es aber so viele Namen für den Teil des Systems gibt, der deinen Code ausführt, wollte ich keine Verwirrung stiften, indem ich den Namen ändere. Deshalb bleibe ich bei dem Begriff " Prozessor" für das, was du zur Implementierung deines Systems verwendest. Der größte Teil des Materials ist auf das System anwendbar, das du tatsächlich hast.
In diesem Buch verwendete Konventionen
In diesem Buch werden die folgenden typografischen Konventionen verwendet:
- Kursiv
-
Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.
Constant width
-
Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.
Tipp
Dieses Element steht für einen Tipp oder eine Anregung.
Hinweis
Dieses Element steht für einen allgemeinen Hinweis.
Warnung
Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.
Code-Beispiele verwenden
Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Im Allgemeinen darfst du den Code in diesem Buch in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Wenn du eine CD-ROM mit Beispielen aus den O'Reilly-Büchern verkaufst oder verteilst, ist eine Genehmigung erforderlich. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Erlaubnis erforderlich.
Für dieses Buch gibt es ein GitHub-Repository mit Code, Tools und Hinweisen auf weitere Informationen.
Wir schätzen die Namensnennung, verlangen sie aber nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel: "Making Embedded Systems von Elecia White (O'Reilly). Copyright 2024 Elecia White, 978-1-098-15154-6."
Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter permissions@oreilly.com kontaktieren .
O'Reilly Online Learning
Hinweis
Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.
Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen erhältst du unter https://oreilly.com.
Wie du uns kontaktierst
Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Nord
- Sebastopol, CA 95472
- 800-889-8969 (in den Vereinigten Staaten oder Kanada)
- 707-827-7019 (international oder lokal)
- 707-829-0104 (Fax)
- support@oreilly.com
- https://www.oreilly.com/about/contact.html
Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/making-embedded-systems-2 aufrufen .
Neuigkeiten und Informationen über unsere Bücher und Kurse findest du unter https://oreilly.com.
Du findest uns auf LinkedIn: https://linkedin.com/company/oreilly-media.
Sieh uns auf YouTube: https://youtube.com/oreillymedia.
Danksagungen
Dieses Buch ist nicht in einem Vakuum entstanden. Es begann mit einem Kollegen, der sagte: "Hey, kennst du ein Buch, das ich einem meiner Nachwuchsingenieure geben kann?" Aus dieser Saat wurden Monate des Schreibens; ich lernte, verständnisvolle (und ermutigende) Freunde wirklich zu schätzen. Dann waren da noch die Ingenieure, die ihre Zeit opferten, um das technische Material zu prüfen (alle verbleibenden Probleme sind natürlich meine Schuld, nicht ihre). Und schließlich leistete O'Reilly während des gesamten Prozesses großartige Unterstützung.
Jedem Einzelnen so zu danken, wie er es verdient, würde seitenlang dauern, also werde ich sie einfach alle in einem Atemzug nennen, in keiner bestimmten Reihenfolge: Phillip King, Ken Brown, Jerry Ryle, Matthew Hughes, Eric Angell, Scott Fitzgerald, John Catsoulis, Robert P. J. Day, Rebecca Demarest, Jen Costillo, Phillip Johnston, Rene Xoese Kwasi Novor und Chris Svec. Diese Leute haben den Geschmack dieses Buches entscheidend geprägt. Es gibt noch weitere Danksagungen im Buch, bei denen ich von einer bestimmten Person in einem bestimmten Bereich Hilfe bekommen habe.
Schließlich bedanken sich Autoren immer überschwänglich bei ihren Ehepartnern; das ist ein Klischee. Aber nachdem ich ein Buch geschrieben habe, weiß ich, warum. Christopher White, meinem Lieblingsschlagzeuger, Physiker und Ingenieur für eingebettete Systeme, danke ich von ganzem Herzen. Für alles.
1 Erich Gamma, et al., Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley).
Get Herstellung eingebetteter Systeme, 2. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.