Ich hätte gerne ein paar Tipps für diejenigen, die ein guter Embedded-Software-Entwickler werden oder sich in diesem Bereich verbessern möchten.
Was muss ich über Hardware und Software lernen?
Welche Bücher sind am empfehlenswertesten? Blogs?
Wie könnte ich am Ende von einem Anfänger-Bastler zu einem exzellenten Profi werden?
Bisher waren alle Antworten gut, aber ich gebe meinen Senf dazu.
Hier ist eine Wiederholung einiger Tipps mit einem Twist und einigen Extras:
Hier sind einige Bücher:
Hier einige Webseiten:
Für Bücher würde ich empfehlen, in der Geschichte zu graben. Die meisten der heutigen eingebetteten Softwaretechniken stammen von der Schneide vergangener Zeiten.
Wie alles, üben Sie täglich.
Die anderen Antworten sind großartig, aber der größte Unterschied zwischen einem Bastler und einem Profi sollte die Einstellung zur Qualität sein. Also lassen Sie Ihr Projekt den ganzen Weg gehen, hören Sie nicht auf, wenn Sie mit einem Projekt zu 80% fertig sind. Gehen Sie alles durch, beweisen Sie, dass es funktioniert, und dokumentieren Sie es korrekt.
Stellen Sie sicher, dass Ihr Code lesbar und wartbar ist.
Und vergiss nicht, auch etwas Spaß zu haben :)
Abgesehen von dem Offensichtlichen, wie dem Erlernen von C und dem Start mit einem Entwicklerboard, sollten Sie lernen, Mikrocontroller-Datenblätter zu lesen .
Hersteller fügen Mikrocontrollern immer mehr Funktionen hinzu, die dadurch immer komplexer werden. Das Datenblatt enthält nicht nur elektrische Eigenschaften (was für den Elektroniker interessanter ist als für den Softwareentwickler), sondern auch eine detaillierte Beschreibung von Registern, Speicherabbildern usw.
Beim ersten Lesen eines Datenblatts mag es abschreckend wirken, aber nicht verständlich sein kann in der Debugging-Phase stärkere Kopfschmerzen verursachen.
'Embedded' ist ein etwas belasteter Begriff..
In gewisser Hinsicht könnte jedes System, das für die Ausführung einer einzelnen Anwendung bestimmt ist, als eingebettetes System bezeichnet werden, solange es Hardware gibt, die gesteuert werden muss. Sie können einen 400-MHz-PPC604 mit 2 GB RAM, auf dem eine Java-Anwendung auf Linux ausgeführt wird, wohl als eingebettetes System bezeichnen, wenn er zufällig einen Prozess über lokale E / A-Module steuert. Andererseits wäre ein Arduino, der nur eine Art minimale Netzwerkanwendung ausführt, kein großes eingebettetes System. Aber wahrscheinlich denken die meisten Leute bei „eingebettet“ an Flash-basierte Controller mit nur ein paar hundert Byte RAM, ohne nennenswertes Betriebssystem und einer Fülle von On-Chip-Peripheriegeräten.
Abgesehen davon sind die wahrscheinlich zwei größten Hürden, denen sich nicht-eingebettete Programmierer gegenübersehen, wenn sie eingebettete Systeme lernen, E/A-Register und Interrupts.
Interrupts sind möglicherweise das einfachere der beiden Konzepte für nicht eingebettete Programmierer, da die Hauptprobleme bei diesen, Nebenläufigkeit und ereignisgesteuerte Programmierung, häufig in Mainstream-Anwendungen auftreten. Was Interrupts zu einem Schmerz macht, ist die Erkenntnis, wie extrem empfindlich ein System auf die Qualität seiner Interrupt-Behandlung reagiert und wie kompliziert es ist, mit Hardware umzugehen, um den Interrupt-Zustand zu löschen und für den nächsten vorzubereiten. Bei 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 den Uneingeweihten kann es ziemlich überraschend sein zu entdecken, dass das Lesen dieses Registers hier eine Auswirkung auf das Register dort hat . Schreiben von Einsen zum Löschen von Bits. Statusbits, die sich selbst löschen, wenn Sie ein Datenregister lesen usw. 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. Das Schreiben eines Gerätetreibers für eine serielle Schnittstelle wird Ihnen viel über die Low-Level-E/A-Programmierung beibringen.
Es gibt wirklich keinen Ersatz dafür, diese Dinge zu lernen, als die Ärmel hochzukrempeln und ein wenig reines C und/oder Assemblersprache auf dem Bare Metal zu programmieren. Sogar das oben erwähnte Java-basierte eingebettete System benötigt irgendwann einen Gerätetreiber für die E/A, und das bedeutet letztendlich, sich mit etwas C auseinanderzusetzen. Erfahrung ist der beste Lehrmeister. Wählen Sie einen Mikrocontroller, sei es MSP430, TMS320, AVR, ARM, PIC, 68HC11, was auch immer, finden Sie ein Evaluierungskit und bauen Sie einige Systeme.
Sparkfun hat eine Reihe guter Entwicklungsplatinen für unter $\$$50. Gehen Sie auch zu TI für die Stellaris-Familie im $ $ 100, auch das Hawkboard , das ich vorerst vor dem Beagleboard empfehlen würde, für das, was Sie vielleicht lernen möchten / müssen, auch TI hat die MSP430-Familie und ich würde ein EZ430 und ein Dreierpack der Add-In-Boards für $\$ bekommen $10. Holen Sie sich bei Sparkfun ein Lillypad mit dem FTDI USB Serial/Power Board, das Lillypad ist so ziemlich das gleiche wie das Arduino Pro Miniaber Sie müssen für den Pro Mini löten. Ich bin kein Fan der PIC-Familie, aber vielleicht möchten Sie dort etwas als Geschichtsstunde bekommen, das gleiche gilt für den 8051, beide Familien sind immer noch beliebt und in Gebrauch, nur nicht sehr effizient und wurden von anderen Architekturen übergangen. Lernen Sie unbedingt ARM und Daumen, vielleicht MIPS (was ein pic-32 ist, nicht zu verwechseln mit der älteren ursprünglichen PIC-Architektur). Das ARMmite Pro ist ein gutes Einstiegs-ARM-Board, obwohl das Stellaris es auch sein könnte.
Was Sie hier lernen möchten, ist Assembler für verschiedene Plattformen. C. Interaktion zwischen C und Assembler. Verschiedene Tools GCC und Nicht-GCC. Wie man eine Datenblatt-/Programmierreferenz liest (und erkennt, dass sie alle einige Fehler haben oder irreführend sein können, vertraue ihnen niemals, die Hardware gewinnt über Dokumente) und wie man einen Schaltplan liest oder verwendet. Dies sind normalerweise keine komplizierten Schaltpläne. Einige der Boards eignen sich gut für Schnittstellen in Projekten, was bedeutet, dass sie keinen Müll auf dem Board haben, sondern nur direkten Zugriff auf die I/O-Pins. Aber das ist nicht das Beste zum Lernen. So etwas wie ein StellarisBoard, das für Projekte schmerzhaft ist, hat viele lustige Sachen an Bord, um Embedded zu lernen und zu lernen, Treiber zu leihen/zu verwenden oder eigene aus Datenblättern zu schreiben. Der Atmel AVR-Schmetterling ist auch ein gutes Board, wenn er noch verfügbar ist. Möglicherweise müssen Sie an Ihrem eigenen seriellen Anschluss löten, um ihn zu programmieren, oder einfach einige Drähte in die Löcher klemmen. Was es Ihnen gibt, sind ein paar Peripheriegeräte, die Sie programmieren lernen können.
Selbst wenn Sie am Ende Embedded-Arbeiten erledigen, bei denen Sie Anwendungen mit SDK- oder API-Aufrufen unter Linux oder einem RTOS schreiben (ohne Hardware zu berühren oder Datenblätter zu lesen), werden Sie mit den oben genannten Kenntnissen immer noch einen Schritt voraus sein.
Dieser Artikel (automatisch aus dem Portugiesischen ins Englische übersetzt) bietet einen guten Überblick über die Entwicklung einer Karriere als Entwickler von eingebetteter Software. Hinweis: Das Original ist hier .
Es beginnt mit der Skizzierung der Wissensbereiche, die Sie entwickeln müssen:
Wissen: Sie müssen die Theorie von eingebetteten Systemen kennen. Gemeint sind Hard- und Software. Es ist unmöglich, ein kompetenter Entwickler von eingebetteter Software zu sein, ohne die funktionierende Hardwarearchitektur zu kennen.
Skill: Sie müssen Erfahrung in dem Bereich sammeln. Braucht Übung. Sie können alle PIC-Assembler-Mnemoniken dekorieren, aber es nützt nichts, wenn Sie mit diesem Wissen keine LED ansteuern können.
Einstellung: Sie brauchen vor allem eine Einstellung, die Sie in diesem Bereich wachsen lässt. Es ist eine sehr dynamische mit häufigen Änderungen und Entwicklungen. Sie müssen immer motiviert sein (a) Autodidakt sein, Spaß am Lernen haben, „optimieren“ und verstehen, wie die Dinge funktionieren. Ohne solche Einstellungen wirst du bald aufgeben. Denn in diesem Bereich muss man sehr, sehr hartnäckig sein.
Es gibt dann die folgenden Tipps zur Bewältigung dieser Bereiche (und entwickelt sie mit weiterem Text, dies sind nur die Überschriften):
- Was Sie brauchen, um Hardware zu lernen (mindestens)
- Was Sie zum Erlernen der Software benötigen (mindestens)
- Studieren Sie außerdem Betriebssysteme
- Sie brauchen eine Ausbildung
- Hören Sie nicht auf, lernen Sie weiter und entwickeln Sie Ihr Netzwerk weiter!
Denken Sie zweimal darüber nach, bevor Sie Embedded Software Engineer werden. Ich hatte Phasen in meiner Karriere. Ich habe in den ersten 5 Jahren Software entwickelt, bin dann in den Vertrieb/Marketing gewechselt, habe das 15 Jahre lang gemacht, ein 100+M$-Geschäft geleitet und bin jetzt zurück zur Software.
Wenn ich nach 15 Jahren zur Software zurückkehre, erinnere ich mich, warum ich überhaupt gegangen bin. Es ist schwer. Es erfordert Konzentration, mehrere hundert Codezeilen, die sich berühren, und Sie alle müssen es im Gedächtnis behalten. Eingebettet ist besonders hart.
Du musst dich auch selbst verstehen. Wenn Sie im Allgemeinen ein kluger Kerl, akribisch und geduldig sind, würden Sie einen großartigen Ingenieur abgeben. Wenn Sie eines davon vermissen, werden Sie bestenfalls durchschnittlich sein. Denk darüber nach. Wenn Sie ultraschlau und nicht geduldig sind, ist das nicht viel wert, denn egal wie schlau Sie sind, gute Technik erfordert Geduld und Liebe zum Detail.
Sie müssen sich auch wohl fühlen, wenn Sie Codestunden gleichzeitig ansehen, ohne zu sprechen. Ich beobachte, dass Menschen mit guter sozialer Kompetenz das unerträglich finden.
Wenn all dies zutrifft, dann lesen Sie all diese großartigen Bücher, machen Sie die Übungen und Sie werden ein großartiger Ingenieur sein. Viel Glück
Alle anderen sagen tolle Dinge. Deshalb gebe ich Ihnen einen allgemeinen Rat: Lesen, Lesen, Lesen, Lesen, Lesen, Lesen, Lesen!
Lesen Sie jeden Artikel auf http://embeddedgurus.com Wenn Sie etwas nicht verstehen, recherchieren Sie es. Wenn Sie in der Erklärung dieser Dinge etwas finden, das Sie nicht verstehen, lesen Sie weiter. Ich stehe kurz vor dem Einstieg in eine Embedded-Software-Position und meine Erfahrung besteht aus einer Handvoll professioneller Projekte in den letzten Jahren und einer Menge Lesestoff. Erfahrung lässt Sie Dinge ausprobieren, aber Lesen lässt Sie wissen, ob die Dinge, die Sie versucht haben, schon einmal gemacht wurden, vielleicht besser als Sie es könnten. Es führt Sie in Konzepte ein, mit denen Sie unter allen Umständen arbeiten können.
Gerade gelesen!
Werden Sie Experte für C. Verstehen Sie Timer und serielle Kommunikation. Damit solltest du dir die Hände schmutzig machen. Verstehen Sie HF-Protokolle und passen Sie sie an Ihre Anforderungen an. Probieren Sie Codekombinationen beim Debuggen nicht einfach blind aus. Code tut genau das, was Sie ihm sagen. Lesen Sie die Bedienungsanleitung und das Datenblatt und nehmen Sie dann eine Änderung vor, wenn etwas nicht funktioniert. Alles in allem ist der einzige wirkliche Weg, ein Experte zu werden, das Üben. Erstellen Sie weiterhin Anwendungen. Bald wird es zur zweiten Natur werden.
Jay Atkinson
tyblu